Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(239)

Side by Side Diff: bin/builtin_in.cc

Issue 8673002: - Refactor the isolate callback mechanism to also include creation of the (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/runtime/
Patch Set: '' Created 9 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « bin/builtin.cc ('k') | bin/builtin_natives.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 #include <stdlib.h> 5 #include <stdlib.h>
6 #include <string.h> 6 #include <string.h>
7 7
8 #include "include/dart_api.h"
9
10 #include "bin/builtin.h" 8 #include "bin/builtin.h"
11 #include "bin/dartutils.h"
12 9
13 // The string on the next line will be filled in with the contents of the 10 // The string on the next line will be filled in with the contents of the
14 // builtin.dart file. 11 // builtin.dart file.
15 // This string forms the content of builtin functionality which is injected 12 // This string forms the content of builtin functionality which is injected
16 // into standalone dart to provide some test/debug functionality. 13 // into standalone dart to provide some test/debug functionality.
17 static const char Builtin_source_[] = { 14 const char Builtin::Builtin_source_[] = {
18 {{DART_SOURCE}} 15 {{DART_SOURCE}}
19 }; 16 };
20
21
22 // List all native functions implemented in standalone dart that is used
23 // to inject additional functionality e.g: Logger, file I/O, socket I/O etc.
24 #define BUILTIN_NATIVE_LIST(V) \
25 V(Directory_List, 7) \
26 V(Directory_Exists, 2) \
27 V(Directory_Create, 2) \
28 V(Directory_CreateTemp, 3) \
29 V(Directory_Delete, 2) \
30 V(EventHandler_Start, 1) \
31 V(EventHandler_SendData, 4) \
32 V(Exit, 1) \
33 V(File_Open, 2) \
34 V(File_Exists, 1) \
35 V(File_Close, 1) \
36 V(File_ReadByte, 1) \
37 V(File_WriteByte, 2) \
38 V(File_WriteString, 2) \
39 V(File_ReadList, 4) \
40 V(File_WriteList, 4) \
41 V(File_Position, 1) \
42 V(File_SetPosition, 2) \
43 V(File_Truncate, 2) \
44 V(File_Length, 1) \
45 V(File_Flush, 1) \
46 V(File_Create, 1) \
47 V(File_Delete, 1) \
48 V(File_FullPath, 1) \
49 V(Logger_PrintString, 1) \
50 V(Platform_NumberOfProcessors, 0) \
51 V(Platform_OperatingSystem, 0) \
52 V(Platform_PathSeparator, 0) \
53 V(Process_Start, 8) \
54 V(Process_Kill, 2) \
55 V(Process_Exit, 2) \
56 V(ServerSocket_CreateBindListen, 4) \
57 V(ServerSocket_Accept, 2) \
58 V(Socket_CreateConnect, 3) \
59 V(Socket_Available, 1) \
60 V(Socket_ReadList, 4) \
61 V(Socket_WriteList, 4) \
62 V(Socket_GetPort, 1) \
63 V(Socket_GetStdioHandle, 2)
64
65
66 BUILTIN_NATIVE_LIST(DECLARE_FUNCTION);
67
68 static struct NativeEntries {
69 const char* name_;
70 Dart_NativeFunction function_;
71 int argument_count_;
72 } BuiltinEntries[] = {
73 BUILTIN_NATIVE_LIST(REGISTER_FUNCTION)
74 };
75
76
77 static Dart_NativeFunction native_lookup(Dart_Handle name,
78 int argument_count) {
79 const char* function_name = NULL;
80 Dart_Handle result = Dart_StringToCString(name, &function_name);
81 DART_CHECK_VALID(result);
82 ASSERT(function_name != NULL);
83 int num_entries = sizeof(BuiltinEntries) / sizeof(struct NativeEntries);
84 for (int i = 0; i < num_entries; i++) {
85 struct NativeEntries* entry = &(BuiltinEntries[i]);
86 if (!strcmp(function_name, entry->name_)) {
87 if (entry->argument_count_ == argument_count) {
88 return reinterpret_cast<Dart_NativeFunction>(entry->function_);
89 } else {
90 // Wrong number of arguments.
91 // TODO(regis): Should we pass a buffer for error reporting?
92 return NULL;
93 }
94 }
95 }
96 return NULL;
97 }
98
99
100 static void SetupCorelibImports(Dart_Handle builtin_lib) {
101 // Lookup the core libraries and import the builtin library into them.
102 Dart_Handle url = Dart_NewString(DartUtils::kCoreLibURL);
103 Dart_Handle core_lib = Dart_LookupLibrary(url);
104 DART_CHECK_VALID(core_lib);
105 Dart_Handle result = Dart_LibraryImportLibrary(core_lib, builtin_lib);
106 DART_CHECK_VALID(result);
107
108 url = Dart_NewString(DartUtils::kCoreImplLibURL);
109 Dart_Handle coreimpl_lib = Dart_LookupLibrary(url);
110 DART_CHECK_VALID(coreimpl_lib);
111 result = Dart_LibraryImportLibrary(coreimpl_lib, builtin_lib);
112 DART_CHECK_VALID(result);
113 }
114
115
116 Dart_Handle Builtin_Source() {
117 Dart_Handle str = Dart_NewString(Builtin_source_);
118 return str;
119 }
120
121
122 void Builtin_SetupLibrary(Dart_Handle builtin_lib) {
123 // Setup core lib, builtin import structure.
124 SetupCorelibImports(builtin_lib);
125 // Setup the native resolver for built in library functions.
126 Dart_Handle result = Dart_SetNativeResolver(builtin_lib, native_lookup);
127 DART_CHECK_VALID(result);
128 }
129
130
131 void Builtin_ImportLibrary(Dart_Handle library) {
132 Dart_Handle url = Dart_NewString(DartUtils::kBuiltinLibURL);
133 Dart_Handle builtin_lib = Dart_LookupLibrary(url);
134 if (Dart_IsError(builtin_lib)) {
135 Dart_Handle source = Dart_NewString(Builtin_source_);
136 builtin_lib = Dart_LoadLibrary(url, source);
137 if (!Dart_IsError(builtin_lib)) {
138 Builtin_SetupLibrary(builtin_lib);
139 }
140 }
141 // Import the builtin library into current library.
142 DART_CHECK_VALID(builtin_lib);
143 Dart_Handle result = Dart_LibraryImportLibrary(library, builtin_lib);
144 DART_CHECK_VALID(result);
145 }
146
147
148 void Builtin_SetNativeResolver() {
149 Dart_Handle url = Dart_NewString(DartUtils::kBuiltinLibURL);
150 Dart_Handle builtin_lib = Dart_LookupLibrary(url);
151 DART_CHECK_VALID(builtin_lib);
152 // Setup the native resolver for built in library functions.
153 Dart_Handle result = Dart_SetNativeResolver(builtin_lib, native_lookup);
154 DART_CHECK_VALID(result);
155 }
OLDNEW
« no previous file with comments | « bin/builtin.cc ('k') | bin/builtin_natives.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698