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

Side by Side Diff: frog/lib/node/node.dart

Issue 9034014: Add support for the node net module. (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: '' Created 8 years, 11 months 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
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 /** 5 /**
6 * A collection of helper io functions implemented using node.js. 6 * A collection of helper io functions implemented using node.js.
7 * 7 *
8 * Idea is to clone the node.js API as closely as possible while adding types. 8 * Idea is to clone the node.js API as closely as possible while adding types.
9 * Dart libraries on top of this will experiment with different APIs. 9 * Dart libraries on top of this will experiment with different APIs.
10 */ 10 */
11 #library('node'); 11 #library('node');
Jennifer Messerly 2012/01/21 01:00:31 nice to see this file simplified
12 12
13 // The sandbox needs to import the constructor functions for all the non-hidden native types we use. 13 #import('dart:coreimpl');
14 #import('nodeimpl.dart');
15 #import('fs.dart');
16
17 var require(String module) native;
Jennifer Messerly 2012/01/21 01:00:31 I'm thinking this should be "_require", since the
18
19 // The sandbox needs to import the constructor functions for all the
20 // non-hidden native types we use.
14 21
15 var createSandbox() native 22 var createSandbox() native
16 """return {'require': require, 'process': process, 'console': console, 23 """return {
24 'require': require,
25 'process': process,
26 'console': console,
17 'Buffer' : Buffer, 27 'Buffer' : Buffer,
18 'setTimeout': setTimeout, 'clearTimeout': clearTimeout};"""; 28 'setTimeout': setTimeout,
29 'clearTimeout': clearTimeout,
30 'setInterval': setInterval,
31 'clearInterval': clearInterval,
32 'module' : module,
33 'ArrayBuffer': ArrayBuffer,
34 'Int8Array': Int8Array,
35 'Uint8Array': Uint8Array,
36 'Int16Array': Int16Array,
37 'Uint16Array': Uint16Array,
38 'Int32Array': Int32Array,
39 'Uint32Array': Uint32Array,
40 'Float32Array': Float32Array,
41 'Float64Array': Float64Array,
42 'DataView': DataView
43 };""";
19 44
20 typedef void RequestListener(ServerRequest request, ServerResponse response); 45 // global console
21
22 // TODO(nweiz): properly title-case these class names
23
24 class http native "require('http')" {
25 static Server createServer(RequestListener listener) native;
26 }
27
28 class Server native "http.Server" {
29 void listen(int port, [String hostname, Function callback]) native;
30 }
31
32 class ServerRequest native "http.IncomingMessage" {
33 final String method;
34 final String url;
35 final Map<String, String> headers;
36 final String httpVersion;
37
38 void setEncoding([String encoding]) {}
39 }
40
41 class ServerResponse native "http.ServerResponse" {
42 int statusCode;
43
44 void setHeader(String name, String value) native;
45
46 String getHeader(String name) native;
47
48 void removeHeader(String name) native;
49
50 void write(String data, [String encoding = 'utf8']) native;
51
52 void end([String data, String encoding = 'utf8']) native;
53 }
54 46
55 class Console native "Console" { 47 class Console native "Console" {
56 // TODO(jimhug): Map node.js's ability to take multiple args to what? 48 // TODO(jimhug): Map node.js's ability to take multiple args to what?
57 void log(String text) native; 49 void log(String text) native;
58 void info(String text) native; 50 void info(String text) native;
59 void warn(String text) native; 51 void warn(String text) native;
60 void error(String text) native; 52 void error(String text) native;
61 void dir(Object obj) native; 53 void dir(Object obj) native;
62 void time(String label) native; 54 void time(String label) native;
63 void timeEnd(String label) native; 55 void timeEnd(String label) native;
(...skipping 13 matching lines...) Expand all
77 // typedef EventListener([arg1, arg2, arg3]); 69 // typedef EventListener([arg1, arg2, arg3]);
78 70
79 interface EventEmitter { 71 interface EventEmitter {
80 // void addListener(String event, EventListener listener); 72 // void addListener(String event, EventListener listener);
81 // void on(String event, EventListener listener); 73 // void on(String event, EventListener listener);
82 // void once(String event, EventListener listener); 74 // void once(String event, EventListener listener);
83 // void removeListener(String event, EventListener listener); 75 // void removeListener(String event, EventListener listener);
84 // List<EventListener> listeners(String event); 76 // List<EventListener> listeners(String event);
85 void removeAllListeners(String event); 77 void removeAllListeners(String event);
86 void setMaxListeners(num n); 78 void setMaxListeners(num n);
87 // TODO(jackpal): use rest arguments 79 }
88 void emit(String event, [var arg1, var arg2, var arg3]); 80
81 typedef void StreamErrorListener(Error exception);
82 typedef void StreamCloseListener();
83
84 interface CommonStream extends EventEmitter {
85 // Error event
86 void emitError(Error error);
87 void addListenerError(StreamErrorListener listener);
88 void onError(StreamErrorListener listener);
89 void onceError(StreamErrorListener listener);
90 void removeListenerError(StreamErrorListener listener);
91 List<StreamErrorListener> listenersError();
92
93 // Close event
94 void emitClose();
95 void addListenerClose(StreamCloseListener listener);
96 void onClose(StreamCloseListener listener);
97 void onceClose(StreamCloseListener listener);
98 void removeListenerClose(StreamCloseListener listener);
99 List<StreamCloseListener> listenersClose();
100
101 void destroy();
102 void destroySoon();
103 }
104
105 // data is either a Buffer or a String, depending upon whether setEncoding
106 // has been called.
107 typedef void ReadableStreamDataListener(var data);
108 typedef void ReadableStreamEndListener();
109
110 interface ReadableStream extends CommonStream {
111 // Data event
112 void emitData(var data);
113 void addListenerData(ReadableStreamDataListener listener);
114 void onData(ReadableStreamDataListener listener);
115 void onceData(ReadableStreamDataListener listener);
116 void removeListenerData(ReadableStreamDataListener listener);
117 List<ReadableStreamDataListener> listenersData();
118
119 // End event
120 void emitEnd();
121 void addListenerEnd(ReadableStreamEndListener listener);
122 void onEnd(ReadableStreamEndListener listener);
123 void onceEnd(ReadableStreamEndListener listener);
124 void removeListenerEnd(ReadableStreamEndListener listener);
125 List<ReadableStreamEndListener> listenersEnd();
126
127 bool readable;
128 void setEncoding(String encoding);
129 void pause();
130 void resume();
131 WritableStream pipe(WritableStream destination, [Map options]);
132 }
133
134 typedef void WritableStreamDrainListener();
135 typedef void WritableStreamPipeListener(ReadableStream src);
136
137 interface WritableStream extends CommonStream {
138 // Drain event
139 void emitDrain();
140 void addListenerDrain(WritableStreamDrainListener listener);
141 void onDrain(WritableStreamDrainListener listener);
142 void onceDrain(WritableStreamDrainListener listener);
143 void removeListenerDrain(WritableStreamDrainListener listener);
144 List<WritableStreamDrainListener> listenersDrain();
145
146 // Pipe event
147 void emitPipe(ReadableStream src);
148 void addListenerPipe(WritableStreamPipeListener listener);
149 void onPipe(WritableStreamPipeListener listener);
150 void oncePipe(WritableStreamPipeListener listener);
151 void removeListenerPipe(WritableStreamPipeListener listener);
152 List<WritableStreamPipeListener> listenersPipe();
153
154 bool writable;
155 bool write(String string, [String encoding, int fd]);
156 bool writeBuffer(Buffer buffer);
157 void end([String string, String encoding]);
158 void endBuffer(Buffer buffer);
159 }
160
161 interface ReadWriteStream extends ReadableStream, WritableStream {
162 // No additional methods.
163 }
164
165 typedef void FsStreamOpenListener(int fd);
166
167 interface FsStream {
168 // Open event
169 void emitOpen(int fd);
170 void addListenerOpen(FsStreamOpenListener listener);
171 void onOpen(FsStreamOpenListener listener);
172 void onceOpen(FsStreamOpenListener listener);
173 void removeListenerOpen(FsStreamOpenListener listener);
174 List<FsStreamOpenListener> listenersOpen();
89 } 175 }
90 176
91 typedef void ProcessExitListener(); 177 typedef void ProcessExitListener();
92 typedef void ProcessUncaughtExceptionListener(Exception err); 178 typedef void ProcessUncaughtExceptionListener(Exception err);
93 typedef void ProcessSignalListener(); 179 typedef void ProcessSignalListener();
94 180
95 class Process implements EventEmitter native "Process" { 181 class Process implements EventEmitter native "Process" {
96 var _process; 182 var _process;
97 183
98 // Note: This is not an exhaustive list of signals. Check with your 184 // Note: This is not an exhaustive list of signals. Check with your
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
131 final SIGUSR1='SIGUSR1'; 217 final SIGUSR1='SIGUSR1';
132 final SIGUSR2='SIGUSR2'; 218 final SIGUSR2='SIGUSR2';
133 219
134 Process(var this._process); 220 Process(var this._process);
135 221
136 // Implement EventEmitter 222 // Implement EventEmitter
137 void removeAllListeners(String event) 223 void removeAllListeners(String event)
138 native "this._process.removeAllListeners(event);"; 224 native "this._process.removeAllListeners(event);";
139 void setMaxListeners(num n) 225 void setMaxListeners(num n)
140 native "this._process.setMaxListeners(n);"; 226 native "this._process.setMaxListeners(n);";
141 void emit(String event, [var arg1, var arg2, var arg3])
142 native "this._process.emit(event, arg1, arg2, arg3)";
143 227
144 // Exit event 228 // Exit event
145 void emitExit() 229 void emitExit()
146 native "this._process.emit('exit');"; 230 native "this._process.emit('exit');";
147 void addListenerExit(ProcessExitListener listener) 231 void addListenerExit(ProcessExitListener listener)
148 native "this._process.addListener('exit', listener);"; 232 native "this._process.addListener('exit', listener);";
149 void onExit(ProcessExitListener listener) 233 void onExit(ProcessExitListener listener)
150 native "this._process.on('exit', listener);"; 234 native "this._process.on('exit', listener);";
151 void onceExit(ProcessExitListener listener) 235 void onceExit(ProcessExitListener listener)
152 native "this._process.once('exit', listener);"; 236 native "this._process.once('exit', listener);";
(...skipping 24 matching lines...) Expand all
177 native "this._process.addListener(signal, listener);"; 261 native "this._process.addListener(signal, listener);";
178 void onSignal(String signal, ProcessSignalListener listener) 262 void onSignal(String signal, ProcessSignalListener listener)
179 native "this._process.on(signal, listener);"; 263 native "this._process.on(signal, listener);";
180 void onceSignal(String signal, ProcessSignalListener listener) 264 void onceSignal(String signal, ProcessSignalListener listener)
181 native "this._process.once(signal, listener);"; 265 native "this._process.once(signal, listener);";
182 void removeListenerSignal(String signal, ProcessSignalListener listener) 266 void removeListenerSignal(String signal, ProcessSignalListener listener)
183 native "this._process.removeListener(signal, listener);"; 267 native "this._process.removeListener(signal, listener);";
184 List<ProcessSignalListener> listenersSignal(String signal) 268 List<ProcessSignalListener> listenersSignal(String signal)
185 native "return this._process.listeners(signal);"; 269 native "return this._process.listeners(signal);";
186 270
187 WritableStream get stdout() 271 WriteStream get stdout()
188 native "return this._process.stdout;"; 272 native "return this._process.stdout;";
189 WritableStream get stderr() 273 WriteStream get stderr()
190 native "return this._process.stderr;"; 274 native "return this._process.stderr;";
191 ReadableStream get stdin() 275 ReadStream get stdin()
192 native "return this._process.stdin;"; 276 native "return this._process.stdin;";
193 277
194 List<String> get argv() 278 List<String> get argv()
195 native "return this._process.argv;"; 279 native "return this._process.argv;";
196 void set argv(List<String> value) 280 void set argv(List<String> value)
197 native "this._process.argv = value;"; 281 native "this._process.argv = value;";
198 String get execPath() 282 String get execPath()
199 native "return this._process.execPath;"; 283 native "return this._process.execPath;";
200 String chdir(String directory) 284 String chdir(String directory)
201 native "this._process.chdir(directory);"; 285 native "this._process.chdir(directory);";
202 286
203 String cwd() 287 String cwd()
204 native "return this._process.cwd();"; 288 native "return this._process.cwd();";
205 289
206 EnvMap get env() => new EnvMap(_process); 290 Map<String,String> get env()
291 => new _EnvMap(_env());
292 var _env() native "return this._process.env;";
207 293
208 void exit([int code = 0]) 294 void exit([int code = 0])
209 native "this._process.exit(code);"; 295 native "this._process.exit(code);";
210 int getgid() 296 int getgid()
211 native "return this._process.getgid();"; 297 native "return this._process.getgid();";
212 void setgid(var gid_or_groupname) 298 void setgid(var gid_or_groupname)
213 native "this._process.setgid(uid_or_groupname);"; 299 native "this._process.setgid(uid_or_groupname);";
214 int getuid() 300 int getuid()
215 native "return this._process.getuid();"; 301 native "return this._process.getuid();";
216 void setuid(var uid_or_username) 302 void setuid(var uid_or_username)
217 native "this._process.setuid(uid_or_groupname);"; 303 native "this._process.setuid(uid_or_groupname);";
218 String get version() 304 String get version()
219 native "return this._process.version;"; 305 native "return this._process.version;";
306 Map<String,String> get versions()
307 => new _NativeMapPrimitiveValue<String>(_versions());
308 var _versions() native "return this._process._versions;";
220 String get installPrefix() 309 String get installPrefix()
221 native "return this._process.installPrefix;"; 310 native "return this._process.installPrefix;";
222 void kill(int pid, [String signal=SIGTERM]) 311 void kill(int pid, [String signal=SIGTERM])
223 native "this._process.kill(pid, signal);"; 312 native "this._process.kill(pid, signal);";
224 int get pid() 313 int get pid()
225 native "return this._process.pid;"; 314 native "return this._process.pid;";
226 String get title() 315 String get title()
227 native "return this._process.title;"; 316 native "return this._process.title;";
317 String get arch()
318 native "return this._process.arch;";
228 String get platform() 319 String get platform()
229 native "return this._process.platform;"; 320 native "return this._process.platform;";
230 321 MemoryUsage memoryUsage() => new MemoryUsage._from(_memoryUsage());
231 // TODO(jackpal) implement Map memoryUsage() native; 322 var _memoryUsage() native "return this._process.memoryUsage()";
232 void nextTick(Function callback) 323 void nextTick(Function callback)
233 native "return this._process.nextTick(callback);"; 324 native "return this._process.nextTick(callback);";
234 int umask([int mask]) 325 int umask([int mask])
235 native "return this._process.umask(mask);"; 326 native "return this._process.umask(mask);";
327 int uptime()
328 native "return this._process.uptime();";
236 } 329 }
237 330
238 var get _process() 331 var get _process()
239 native "return process;"; 332 native "return process;";
240 333
241 Process get process() { 334 Process get process() {
242 return new Process(_process); 335 return new Process(_process);
243 } 336 }
244 337
245 class EnvMap { 338 class _EnvMap extends NativeMapPrimitiveValue<String>{
Jennifer Messerly 2012/01/21 01:00:31 This code does a wonderful job of working around i
246 var _process; 339 _EnvMap(var env) : super(env);
247 const EnvMap(this._process); 340 // process.env doesn't implement hasOwnProperty
248 operator [](key) native "return this._process.env[key];"; 341 void _forEachKey(var map, void f(String key))
249 342 native """
343 for (var i in map) {
344 f(i);
345 }
346 """;
250 } 347 }
251 348
252 typedef void UtilPumpCallback(var error); 349 class MemoryUsage {
253 350 MemoryUsage._from(var mu) {
254 class util native "require('util')" { 351 rss = NativeGetIntProperty(mu, 'rss');
255 static void debug(String string) native; 352 heapTotal = NativeGetIntProperty(mu, 'heapTotal');
256 static void log(String string) native; 353 heapUsed = NativeGetIntProperty(mu, 'heapUsed');
257 static void inspect(var object, [bool showHidden=false, num depth=2]) native; 354 }
258 static pump(ReadableStream readableStream, WritableStream writeableStream, 355 int rss;
259 [UtilPumpCallback callback]) native; 356 int heapTotal;
260 // the method inherits(a,b) doesn't make sense for Dart 357 int heapUsed;
261 }
262
263 // Object is either a Buffer or a String, depending upon whether setEncoding has been called.
264 typedef void ReadableStreamDataListener(var object);
265 typedef void ReadableStreamEndListener();
266 typedef void ReadableStreamErrorListener(Object exception);
267 typedef void ReadableStreamCloseListener();
268
269 class ReadableStream implements EventEmitter native "*ReadStream" {
270 // EventEmitter
271 void removeAllListeners(String event) native;
272 void setMaxListeners(num n) native;
273 void emit(String event, [var arg1, var arg2, var arg3]) native;
274
275 // Data event
276 void emitData(var data)
277 native "this.emit('data', data);";
278 void addListenerData(ReadableStreamDataListener listener)
279 native "this.addListener('data', listener);";
280 void onData(ReadableStreamDataListener listener)
281 native "this.on('data', listener);";
282 void onceData(ReadableStreamDataListener listener)
283 native "this.once('data', listener);";
284 void removeListenerData(ReadableStreamDataListener listener)
285 native "this.removeListener('data', listener);";
286 List<ReadableStreamDataListener> listenersData()
287 native "return this._process.listeners('data');";
288
289 // End event
290 void emitEnd()
291 native "this.emit('end');";
292 void addListenerEnd(ReadableStreamEndListener listener)
293 native "this.addListener('end', listener);";
294 void onEnd(ReadableStreamEndListener listener)
295 native "this.on('end', listener);";
296 void onceEnd(ReadableStreamEndListener listener)
297 native "this.once('end', listener);";
298 void removeListenerEnd(ReadableStreamEndListener listener)
299 native "this.removeListener('end', listener);";
300 List<ReadableStreamEndListener> listenersEnd()
301 native "return this._process.listeners('end');";
302
303 // Error event
304 void emitError(Object exception)
305 native "this.emit('error', exception);";
306 void addListenerError(ReadableStreamErrorListener listener)
307 native "this.addListener('error', listener);";
308 void onError(ReadableStreamErrorListener listener)
309 native "this.on('error', listener);";
310 void onceError(ReadableStreamErrorListener listener)
311 native "this.once('error', listener);";
312 void removeListenerError(ReadableStreamErrorListener listener)
313 native "this.removeListener('error', listener);";
314 List<ReadableStreamErrorListener> listenersError()
315 native "return this._process.listeners('error');";
316
317 // Close event
318 void emitClose()
319 native "this.emit('close');";
320 void addListenerClose(ReadableStreamCloseListener listener)
321 native "this.addListener('close', listener);";
322 void onClose(ReadableStreamCloseListener listener)
323 native "this.on('close', listener);";
324 void onceClose(ReadableStreamCloseListener listener)
325 native "this.once('close', listener);";
326 void removeListenerClose(ReadableStreamCloseListener listener)
327 native "this.removeListener('close', listener);";
328 List<ReadableStreamCloseListener> listenersClose()
329 native "return this._process.listeners('close');";
330
331 bool readable;
332 void setEncoding(String encoding) native;
333 void pause() native;
334 void resume() native;
335 void destroy() native;
336 void destroySoon() native;
337 void pipe(WritableStream destination, [bool end=true])
338 native "this.pipe(destination, {'end': end});";
339 }
340
341 typedef void WritableStreamDrainListener();
342 typedef void WritableStreamErrorListener(Object exception);
343 typedef void WritableStreamCloseListener();
344 typedef void WritableStreamPipeListener(ReadableStream src);
345
346 class WritableStream implements EventEmitter native "*WriteStream" {
347 // EventEmitter
348 void removeAllListeners(String event) native "this._writeStream.removeAllListe ners(event);";
349 void setMaxListeners(num n) native;
350 void emit(String event, [var arg1, var arg2, var arg3]) native;
351
352 // Drain event
353 void emitDrain()
354 native "this.emit('drain');";
355 void addListenerDrain(WritableStreamDrainListener listener)
356 native "this.addListener('drain', listener);";
357 void onDrain(WritableStreamDrainListener listener)
358 native "this.on('drain', listener);";
359 void onceDrain(WritableStreamDrainListener listener)
360 native "this.once('drain', listener);";
361 void removeListenerDrain(WritableStreamDrainListener listener)
362 native "this.removeListener('drain', listener);";
363 List<WritableStreamDrainListener> listenersDrain()
364 native "return this._process.listeners('drain');";
365
366 // Error event
367 void emitError(Object exception)
368 native "this.emit('error', exception);";
369 void addListenerError(WritableStreamErrorListener listener)
370 native "this.addListener('error', listener);";
371 void onError(WritableStreamErrorListener listener)
372 native "this.on('error', listener);";
373 void onceError(WritableStreamErrorListener listener)
374 native "this.once('error', listener);";
375 void removeListenerError(WritableStreamErrorListener listener)
376 native "this.removeListener('error', listener);";
377 List<WritableStreamErrorListener> listenersError()
378 native "return this._process.listeners('error');";
379
380 // Close event
381 void emitClose()
382 native "this.emit('close');";
383 void addListenerClose(WritableStreamCloseListener listener)
384 native "this.addListener('close', listener);";
385 void onClose(WritableStreamCloseListener listener)
386 native "this.on('close', listener);";
387 void onceClose(WritableStreamCloseListener listener)
388 native "this.once('close', listener);";
389 void removeListenerClose(WritableStreamCloseListener listener)
390 native "this.removeListener('close', listener);";
391 List<WritableStreamCloseListener> listenersClose()
392 native "return this._process.listeners('close');";
393
394 // Pipe event
395 void emitPipe(ReadableStream src)
396 native "this.emit('pipe', src);";
397 void addListenerPipe(WritableStreamPipeListener listener)
398 native "this.addListener('pipe', listener);";
399 void onPipe(WritableStreamPipeListener listener)
400 native "this.on('pipe', listener);";
401 void oncePipe(WritableStreamPipeListener listener)
402 native "this.once('pipe', listener);";
403 void removeListenerPipe(WritableStreamPipeListener listener)
404 native "this.removeListener('pipe', listener);";
405 List<WritableStreamPipeListener> listenersPipe()
406 native "return this._process.listeners('pipe');";
407
408 bool writable;
409 bool write(String string, [String encoding='utf8', int fd]) native;
410 bool writeBuffer(Buffer buffer) native;
411 void end([String string, String encoding='utf8']) native;
412 void endBuffer(Buffer buffer) native "this.end(buffer);";
413 void destroy() native;
414 void destroySoon() native;
415 }
416
417 class vm native "require('vm')" {
418 static void runInThisContext(String code, [String filename]) native;
419 static void runInNewContext(String code, [var sandbox, String filename])
420 native;
421 static Script createScript(String code, [String filename]) native;
422 static Context createContext([sandbox]) native;
423 static runInContext(String code, Context context, [String filename]) native;
424 }
425
426 interface Context {}
427
428 class Script native "vm.Script" {
429 void runInThisContext() native;
430 void runInNewContext([Map sandbox]) native;
431 }
432
433 class fs native "require('fs')" {
434 static void writeFileSync(String outfile, String text) native;
435
436 static String readFileSync(String filename, [String encoding = 'utf8'])
437 native;
438
439 static String realpathSync(String path) native;
440
441 static void mkdirSync(String path, [num mode = 511 /* 0777 octal */]) native;
442 static List<String> readdirSync(String path) native;
443 static void rmdirSync(String path) native;
444 static Stats statSync(String path) native;
445 static void unlinkSync(String path) native;
446
447 static void writeSync(int fd, String text) native;
448 static int openSync(String path, String flags,
449 [num mode = 438] /* 0666 octal */) native;
450 static void closeSync(int fd) native;
451 }
452
453 class Stats native "fs.Stats" {
454 bool isFile() native;
455 bool isDirectory() native;
456 bool isBlockDevice() native;
457 bool isCharacterDevice() native;
458 bool isSymbolicLink() native;
459 bool isFIFO() native;
460 bool isSocket() native;
461
462 // TODO(rnystrom): There are also the other fields we can add here if needed.
463 // See: http://nodejs.org/docs/v0.6.1/api/fs.html#fs.Stats.
464 }
465
466 class path native "require('path')" {
467 static bool existsSync(String filename) native;
468 static String dirname(String path) native;
469 static String basename(String path) native;
470 static String extname(String path) native;
471 static String normalize(String path) native;
472 // TODO(jimhug): Get the right signatures for normalizeArray and join
473 }
474
475 class Readline native "require('readline')" {
476 static ReadlineInterface createInterface(input, output) native;
477 }
478
479 class ReadlineInterface native "Readline.Interface" {
480 void setPrompt(String prompt, [int length]) native;
481 void prompt() native;
482 void on(String event, Function callback) native;
483 } 358 }
484 359
485 interface TimeoutId {} 360 interface TimeoutId {}
486 361
487 TimeoutId setTimeout(Function callback, num delay, [arg]) native; 362 TimeoutId setTimeout(callback(), int delay, [arg /* ... */]) native;
488 clearTimeout(TimeoutId id) native; 363 clearTimeout(TimeoutId timeoutId) native;
489 364
490 typedef void ChildProcessExitListener(int code, String signal); 365 interface IntervalId {}
491 366
492 class ChildProcess implements EventEmitter native "ChildProcess" { 367 IntervalId setInterval(callback(), int delay, [arg /* ... */]) native;
493 var _childprocess; 368 clearInterval(IntervalId intervalId) native;
369
370 // buffer
371
372 interface Buffer extends List<int> default _BufferImplementation {
373 Buffer(int size);
374 Buffer.fromSize(int size);
375 Buffer.fromList(List<int> list);
376 Buffer.fromString(String string, [String encoding]);
377
378 int write(String string, int offset, int length, [String encoding]);
379 String toString(String encoding, int start, int end);
494 380
495 ChildProcess(this._childprocess); 381 void copy(Buffer targetBuffer, int targetStart, int sourceStart, int sourceEnd );
382 Buffer slice(int start, int end);
383
384 int readUInt8(int offset, [bool noAssert]);
385 int readUInt16LE(int offset, [bool noAssert]);
386 int readUInt16BE(int offset, [bool noAssert]);
387 int readUInt32LE(int offset, [bool noAssert]);
388 int readUInt32BE(int offset, [bool noAssert]);
389
390 int readInt8(int offset, [bool noAssert]);
391 int readInt16LE(int offset, [bool noAssert]);
392 int readInt16BE(int offset, [bool noAssert]);
393 int readInt32LE(int offset, [bool noAssert]);
394 int readInt32BE(int offset, [bool noAssert]);
395
396 double readFloatLE(int offset, [bool noAssert]);
397 double readFloatBE(int offset, [bool noAssert]);
398 double readDoubleLE(int offset, [bool noAssert]);
399 double readDoubleBE(int offset, [bool noAssert]);
400
401 void writeUInt8(int value, int offset, [bool noAssert]);
402 void writeUInt16LE(int value, int offset, [bool noAssert]);
403 void writeUInt16BE(int value, int offset, [bool noAssert]);
404 void writeUInt32LE(int value, int offset, [bool noAssert]);
405 void writeUInt32BE(int value, int offset, [bool noAssert]);
406
407 void writeInt8(int value, int offset, [bool noAssert]);
408 void writeInt16LE(int value, int offset, [bool noAssert]);
409 void writeInt16BE(int value, int offset, [bool noAssert]);
410 void writeInt32LE(int value, int offset, [bool noAssert]);
411 void writeInt32BE(int value, int offset, [bool noAssert]);
412
413 void writeFloatLE(double value, int offset, [bool noAssert]);
414 void writeFloatBE(double value, int offset, [bool noAssert]);
415 void writeDoubleLE(double value, int offset, [bool noAssert]);
416 void writeDoubleBE(double value, int offset, [bool noAssert]);
496 417
497 // EventEmitter 418 // end defaults to buffer.length
498 void removeAllListeners(String event) 419 void fill(int value, int offset, int end);
499 native "this._childprocess.removeAllListeners(event);";
500 void setMaxListeners(num n)
501 native "this._childprocess.setMaxListeners(n);";
502 void emit(String event, [var arg1, var arg2, var arg3])
503 native "this._childprocess.emit(event, arg1, arg2, arg3);";
504
505 // 'exit' event
506 void addListenerExit(ChildProcessExitListener listener)
507 native "this._childprocess.addListener('exit', listener);";
508 void onExit(ChildProcessExitListener listener)
509 native "this._childprocess.on('exit', listener);";
510 void onceExit(ChildProcessExitListener listener)
511 native "this._childprocess.once('exit', listener);";
512 void removeListenerExit(ChildProcessExitListener listener)
513 native "this._childprocess.removeListener('exit', listener);";
514 List<ChildProcessExitListener> listenersExit()
515 native "return this._childprocess.listeners('exit');";
516
517 WritableStream get stdin()
518 native "return this._childprocess.stdin;";
519
520 ReadableStream get stdout()
521 native "return this._childprocess.stdout;";
522 ReadableStream get stderr()
523 native "return this._childprocess.stderr;";
524 int get pid()
525 native "return this._childprocess.pid;";
526 } 420 }
527 421
528 typedef void Child_processCallback(Error error, String stdout, String stderr); 422 /** Static methods that apply to all buffers */
529 423
530 class Child_process native { 424 class Buffers {
531 var _cp; 425 static int get charsWritten() native "return Buffer._charsWritten;";
532 426 static bool isBuffer(obj) native "return Buffer.isBuffer(obj);";
533 Child_process() { 427 static int byteLength(String string, [String encoding])
534 _cp = _get_child_process(); 428 native "return Buffer.byteLength(string, encoding);";
535 } 429 static int get INSPECT_MAX_BYTES() native "return Buffer.INSPECT_MAX_BYTES;";
536 430 static void set INSPECT_MAX_BYTES(int v) native "Buffer.INSPECT_MAX_BYTES = v; ";
537 // TODOO(jackpal): translate options into a Javascript dictionary
538 ChildProcess spawn(String command, [List<String> args,
539 Map<String, Object> options]){
540 return new ChildProcess(_spawn(_cp, command, args, options));
541 }
542
543 // TODOO(jackpal): translate options into a Javascript dictionary
544 ChildProcess exec(String command, Child_processCallback callback,
545 [Map<String, Object> options]) {
546 // Note the argument order to exec is different than to _exec,
547 // because Dart can't have optional arguments in the middle of
548 // an argument list.
549 return new ChildProcess(_exec(_cp, command, options, callback));
550 }
551
552 static var _spawn(var cp, String command, List<String> args)
553 native "return cp.spawn(command, args);";
554 static var _exec(var cp, String command, Map<String, Object> options,
555 Child_processCallback callback)
556 native "return cp.exec(command, options, callback);";
557
558 static var _get_child_process()
559 native "return require('child_process');";
560 } 431 }
561 432
562 var get child_process() { 433 class _BufferImplementation implements Buffer native "Buffer" {
563 return new Child_process(); 434 _BufferImplementation(int size) native;
564 } 435 _BufferImplementation.fromSize(int size)
436 native "return new Buffer(size);";
437 _BufferImplementation.fromList(List<int> list)
438 native "return new Buffer(list);";
439 _BufferImplementation.fromString(String string, [String encoding='utf8'])
440 native "return new Buffer(string, encoding);";
565 441
566 class Buffer native "Buffer" {
567 Buffer(int size) native;
568 Buffer.fromSize(int size)
569 native "return new Buffer(size);";
570 Buffer.fromList(List<int> list)
571 native "return new Buffer(list);";
572 Buffer.fromString(String string, [String encoding='utf8'])
573 native "return new Buffer(string, encoding);";
574 // the default length is buffer.length-offset
575 int write(String string, int offset, int length, [String encoding='utf8']) 442 int write(String string, int offset, int length, [String encoding='utf8'])
576 native; 443 native;
577 static int get charsWritten() 444 static int get charsWritten()
578 native "return Buffer._charsWritten;"; 445 native "return Buffer._charsWritten;";
579 String toString(String encoding, int start, int end) native; 446 String toString(String encoding, int start, int end) native;
447
448 // List<int> protocol
580 int operator[](int index) native; 449 int operator[](int index) native;
581 int operator[]=(int index, int value) native; 450 int operator[]=(int index, int value) native;
451
452 void _throwUnsupported() {
453 throw new UnsupportedOperationException('not extendable');
454 }
455 void add(int value) => _throwUnsupported();
456 void addAll(Collection<int> collection) => _throwUnsupported();
457 void addLast(int value) => _throwUnsupported();
458 void clear() => _throwUnsupported();
459 List<int> getRange(int start, int length) {
460 FixedLists.getRangeCheck(this.length, start, length);
461 Buffer b = new Buffer(length);
462 this.copy(b, 0, start, start + length);
463 return b;
464 }
465 int indexOf(int element, [int start])
466 => FixedLists.indexOf(this, element, start);
467 void insertRange(int start, int length, [int initialValue])
468 => _throwUnsupported();
469 int last()
470 => FixedLists.last(this);
471 int lastIndexOf(int element, [int start])
472 => FixedLists.lastIndexOf(this, element, start);
473 void set length(int newLength) => _throwUnsupported();
474 int removeLast() {_throwUnsupported(); return 0; }
475 void removeRange(int start, int length) => _throwUnsupported();
476 void setRange(int start, int length, List<int> from, [int startFrom])
477 => _throwUnsupported();
478 void sort(int compare(int a, int b))
479 => DualPivotQuicksort.sort(this, compare);
480
481 // Collection<int> members:
482 void forEach(void f(int element)) => FixedLists.forEach(this, f);
483 Buffer filter(bool f(int element))
484 => FixedLists.filter(this, f, (length) => new Buffer(length));
485 Buffer map(f(int element))
486 => FixedLists.map(this, f, new Buffer(this.length));
487 bool every(bool f(int element)) => FixedLists.every(this, f);
488 bool some(bool f(int element)) => FixedLists.some(this, f);
489 bool isEmpty() => FixedLists.isEmpty(this);
490
491 // Iterable<int> members:
492 Iterator<int> iterator() => new ListIterator(this);
493
582 static bool isBuffer(obj) native; 494 static bool isBuffer(obj) native;
583 static int byteLength(String string, [String encoding='utf8']) native; 495 static int byteLength(String string, [String encoding='utf8']) native;
584 int length; 496 int get length() native "return this.length;";
585 void copy(Buffer targetBuffer, int targetStart, int sourceStart, int sourceEnd ) native; 497 void copy(Buffer targetBuffer, int targetStart, int sourceStart, int sourceEnd
498 ) native;
586 Buffer slice(int start, int end) native; 499 Buffer slice(int start, int end) native;
587 500
588 int readUInt8(int offset, [bool noAssert=false]) native; 501 int readUInt8(int offset, [bool noAssert=false]) native;
589 int readUInt16LE(int offset, [bool noAssert=false]) native; 502 int readUInt16LE(int offset, [bool noAssert=false]) native;
590 int readUInt16BE(int offset, [bool noAssert=false]) native; 503 int readUInt16BE(int offset, [bool noAssert=false]) native;
591 int readUInt32LE(int offset, [bool noAssert=false]) native; 504 int readUInt32LE(int offset, [bool noAssert=false]) native;
592 int readUInt32BE(int offset, [bool noAssert=false]) native; 505 int readUInt32BE(int offset, [bool noAssert=false]) native;
593 506
594 int readInt8(int offset, [bool noAssert=false]) native; 507 int readInt8(int offset, [bool noAssert=false]) native;
595 int readInt16LE(int offset, [bool noAssert=false]) native; 508 int readInt16LE(int offset, [bool noAssert=false]) native;
(...skipping 30 matching lines...) Expand all
626 } 539 }
627 540
628 class Error native "Error" { 541 class Error native "Error" {
629 var stack; 542 var stack;
630 var arguments; 543 var arguments;
631 var type; 544 var type;
632 String message; 545 String message;
633 bool killed; 546 bool killed;
634 int code; 547 int code;
635 String signal; 548 String signal;
636 } 549 }
550
551 // TODO: module dgram
552
553 // TODO: module https
554
555 // module assert TODO: (or maybe not, isn't there a Dart assert?)
556
557 // Typed arrays
558
559 class ArrayBuffer native "ArrayBuffer" {
560 ArrayBuffer(int length) native;
561 int byteLength;
562 }
563
564 interface ArrayBufferView {
565 final ArrayBuffer buffer;
566 final int byteOffset;
567 final int byteLength;
568 }
569
570 interface TypedArrayBufferView<E> extends ArrayBufferView, List<E> {
571 final int BYTES_PER_ELEMENT;
572
573 void set(TypedArrayBufferView<E> array, [int offset]);
574 TypedArrayBufferView<E> subarray(int begin, [int end]);
575 }
576
577 class Int8Array implements TypedArrayBufferView<int> native "Int8Array" {
Jennifer Messerly 2012/01/21 01:00:31 Do the various versions all have basically the sam
578 final ArrayBuffer buffer;
579 final int byteOffset;
580 final int byteLength;
581
582 final int BYTES_PER_ELEMENT;
583 final int length;
584
585 Int8Array(int length) native;
586 factory Int8Array.fromArray(Int8Array array) native "return new Int8Array(arra y);";
587 factory Int8Array.fromList(List<int> list) native "return new Int8Array(list); ";
588 factory Int8Array.fromArrayBuffer(ArrayBuffer buffer, [int byteOffset, int len gth])
589 native """if (byteOffset === undefined) return new Int8Array(buffer);
590 if (length === undefined) return new Int8Array(buffer, byteOffset);
591 return new Int8Array(buffer, byteOffset, length);""";
592
593 // List protocol
594 int operator[](int index) native;
595 void operator[]=(int index, int value) native;
596 void _throwUnsupported() {
597 throw new UnsupportedOperationException('not extendable');
598 }
599 void add(int value) => _throwUnsupported();
600 void addAll(Collection<int> collection) => _throwUnsupported();
601 void addLast(int value) => _throwUnsupported();
602 void clear() => _throwUnsupported();
603 int indexOf(int element, [int start])
604 => FixedLists.indexOf(this, element, start);
605 void insertRange(int start, int length, [int initialValue])
606 => _throwUnsupported();
607 Int8Array getRange(int start, int length) {
608 FixedLists.getRangeCheck(this.length, start, length);
609 return new Int8Array.fromArray(subarray(start, start+length));
610 }
611 int last()
612 => FixedLists.last(this);
613 int lastIndexOf(int element, [int start])
614 => FixedLists.lastIndexOf(this, element, start);
615 int removeLast() => _throwUnsupported();
616 void removeRange(int start, int length) => _throwUnsupported();
617 void setRange(int start, int length, List<int> from, [int startFrom])
618 => _throwUnsupported();
619 void sort(int compare(int a, int b))
620 => DualPivotQuicksort.sort(this, compare);
621
622 // Collection<int> members:
623 void forEach(void f(int element)) => FixedLists.forEach(this, f);
624 Int8Array filter(bool f(int element))
625 => FixedLists.filter(this, f, (length) => new Int8Array(length));
626 Int8Array map(f(int))
627 => FixedLists.map(this, f, new Int8Array(this.length));
628 bool every(bool f(int element)) => FixedLists.every(this, f);
629 bool some(bool f(int element)) => FixedLists.some(this, f);
630 bool isEmpty() => FixedLists.isEmpty(this);
631
632 // Iterable<int> members:
633 Iterator<int> iterator() => new ListIterator(this);
634
635 void set(Int8Array array, [int offset]) native;
636 Int8Array subarray(int begin, [int end])
637 native "return end == null ? this.subarray(begin) : this.subarray(begin, e nd);";
638 }
639
640 class Uint8Array implements TypedArrayBufferView<int> native "Uint8Array" {
641 final ArrayBuffer buffer;
642 final int byteOffset;
643 final int byteLength;
644
645 final int BYTES_PER_ELEMENT;
646 final int length;
647
648 Uint8Array(int length) native;
649 factory Uint8Array.fromArray(Uint8Array array) native "return new Uint8Array(a rray);";
650 factory Uint8Array.fromList(List<int> list) native "return new Uint8Array(list );";
651 factory Uint8Array.fromArrayBuffer(ArrayBuffer buffer, [int byteOffset, int le ngth])
652 native """if (byteOffset === undefined) return new Uint8Array(buffer);
Jennifer Messerly 2012/01/21 01:00:31 this should be "byteOffset == null" which will che
653 if (length === undefined) return new Uint8Array(buffer, byteOffset);
654 return new Uint8Array(buffer, byteOffset, length);""";
655
656 // List protocol
657 int operator[](int index) native;
658 void operator[]=(int index, int value) native;
659 void _throwUnsupported() {
660 throw new UnsupportedOperationException('not extendable');
661 }
662 void add(int value) => _throwUnsupported();
663 void addAll(Collection<int> collection) => _throwUnsupported();
664 void addLast(int value) => _throwUnsupported();
665 void clear() => _throwUnsupported();
666 int indexOf(int element, [int start])
667 => FixedLists.indexOf(this, element, start);
668 void insertRange(int start, int length, [int initialValue])
669 => _throwUnsupported();
670 Uint8Array getRange(int start, int length) {
671 FixedLists.getRangeCheck(this.length, start, length);
672 return new Uint8Array.fromArray(subarray(start, start+length));
673 }
674 int last()
675 => FixedLists.last(this);
676 int lastIndexOf(int element, [int start])
677 => FixedLists.lastIndexOf(this, element, start);
678 int removeLast() => _throwUnsupported();
679 void removeRange(int start, int length) => _throwUnsupported();
680 void setRange(int start, int length, List<int> from, [int startFrom])
681 => _throwUnsupported();
682 void sort(int compare(int a, int b))
683 => DualPivotQuicksort.sort(this, compare);
684
685 // Collection<int> members:
686 void forEach(void f(int element)) => FixedLists.forEach(this, f);
687 Uint8Array filter(bool f(int element))
688 => FixedLists.filter(this, f, (length) => new Uint8Array(length));
689 Uint8Array map(f(int))
690 => FixedLists.map(this, f, new Uint8Array(this.length));
691 bool every(bool f(int element)) => FixedLists.every(this, f);
692 bool some(bool f(int element)) => FixedLists.some(this, f);
693 bool isEmpty() => FixedLists.isEmpty(this);
694
695 // Iterable<int> members:
696 Iterator<int> iterator() => new ListIterator(this);
697
698 void set(Uint8Array array, [int offset]) native;
699 Uint8Array subarray(int begin, [int end])
700 native "return end == null ? this.subarray(begin) : this.subarray(begin, e nd);";
701 }
702
703 class Int16Array implements TypedArrayBufferView<int> native "Int16Array" {
704 final ArrayBuffer buffer;
705 final int byteOffset;
706 final int byteLength;
707
708 final int BYTES_PER_ELEMENT;
709 final int length;
710
711 Int16Array(int length) native;
712 factory Int16Array.fromArray(Int16Array array) native "return new Int16Array(a rray);";
713 factory Int16Array.fromList(List<int> list) native "return new Int16Array(list );";
714 factory Int16Array.fromArrayBuffer(ArrayBuffer buffer, [int byteOffset, int le ngth])
715 native """if (byteOffset === undefined) return new Int16Array(buffer);
716 if (length === undefined) return new Int16Array(buffer, byteOffset);
717 return new Int16Array(buffer, byteOffset, length);""";
718
719 // List protocol
720 int operator[](int index) native;
721 void operator[]=(int index, int value) native;
722 void _throwUnsupported() {
723 throw new UnsupportedOperationException('not extendable');
724 }
725 void add(int value) => _throwUnsupported();
726 void addAll(Collection<int> collection) => _throwUnsupported();
727 void addLast(int value) => _throwUnsupported();
728 void clear() => _throwUnsupported();
729 int indexOf(int element, [int start])
730 => FixedLists.indexOf(this, element, start);
731 void insertRange(int start, int length, [int initialValue])
732 => _throwUnsupported();
733 Int16Array getRange(int start, int length) {
734 FixedLists.getRangeCheck(this.length, start, length);
735 return new Int16Array.fromArray(subarray(start, start+length));
736 }
737 int last()
738 => FixedLists.last(this);
739 int lastIndexOf(int element, [int start])
740 => FixedLists.lastIndexOf(this, element, start);
741 int removeLast() => _throwUnsupported();
742 void removeRange(int start, int length) => _throwUnsupported();
743 void setRange(int start, int length, List<int> from, [int startFrom])
744 => _throwUnsupported();
745 void sort(int compare(int a, int b))
746 => DualPivotQuicksort.sort(this, compare);
747
748 // Collection<int> members:
749 void forEach(void f(int element)) => FixedLists.forEach(this, f);
750 Int16Array filter(bool f(int element))
751 => FixedLists.filter(this, f, (length) => new Int16Array(length));
752 Int16Array map(f(int))
753 => FixedLists.map(this, f, new Int16Array(this.length));
754 bool every(bool f(int element)) => FixedLists.every(this, f);
755 bool some(bool f(int element)) => FixedLists.some(this, f);
756 bool isEmpty() => FixedLists.isEmpty(this);
757
758 // Iterable<int> members:
759 Iterator<int> iterator() => new ListIterator(this);
760
761 void set(Int16Array array, [int offset]) native;
762 Int16Array subarray(int begin, [int end])
763 native "return end == null ? this.subarray(begin) : this.subarray(begin, e nd);";
764 }
765
766 class Uint16Array implements TypedArrayBufferView<int> native "Uint16Array" {
767 final ArrayBuffer buffer;
768 final int byteOffset;
769 final int byteLength;
770
771 final int BYTES_PER_ELEMENT;
772 final int length;
773
774 Uint16Array(int length) native;
775 factory Uint16Array.fromArray(Uint16Array array) native "return new Uint16Arra y(array);";
776 factory Uint16Array.fromList(List<int> list) native "return new Uint16Array(li st);";
777 factory Uint16Array.fromArrayBuffer(ArrayBuffer buffer, [int byteOffset, int l ength])
778 native """if (byteOffset === undefined) return new Uint16Array(buffer);
779 if (length === undefined) return new Uint16Array(buffer, byteOffset);
780 return new Uint16Array(buffer, byteOffset, length);""";
781
782 // List protocol
783 int operator[](int index) native;
784 void operator[]=(int index, int value) native;
785 void _throwUnsupported() {
786 throw new UnsupportedOperationException('not extendable');
787 }
788 void add(int value) => _throwUnsupported();
789 void addAll(Collection<int> collection) => _throwUnsupported();
790 void addLast(int value) => _throwUnsupported();
791 void clear() => _throwUnsupported();
792 int indexOf(int element, [int start])
793 => FixedLists.indexOf(this, element, start);
794 void insertRange(int start, int length, [int initialValue])
795 => _throwUnsupported();
796 Uint16Array getRange(int start, int length) {
797 FixedLists.getRangeCheck(this.length, start, length);
798 return new Uint16Array.fromArray(subarray(start, start+length));
799 }
800 int last()
801 => FixedLists.last(this);
802 int lastIndexOf(int element, [int start])
803 => FixedLists.lastIndexOf(this, element, start);
804 int removeLast() => _throwUnsupported();
805 void removeRange(int start, int length) => _throwUnsupported();
806 void setRange(int start, int length, List<int> from, [int startFrom])
807 => _throwUnsupported();
808 void sort(int compare(int a, int b))
809 => DualPivotQuicksort.sort(this, compare);
810
811 // Collection<int> members:
812 void forEach(void f(int element)) => FixedLists.forEach(this, f);
813 Uint16Array filter(bool f(int element))
814 => FixedLists.filter(this, f, (length) => new Uint16Array(length));
815 Uint16Array map(f(int))
816 => FixedLists.map(this, f, new Uint16Array(this.length));
817 bool every(bool f(int element)) => FixedLists.every(this, f);
818 bool some(bool f(int element)) => FixedLists.some(this, f);
819 bool isEmpty() => FixedLists.isEmpty(this);
820
821 // Iterable<int> members:
822 Iterator<int> iterator() => new ListIterator(this);
823
824 void set(Uint16Array array, [int offset]) native;
825 Uint16Array subarray(int begin, [int end])
826 native "return end == null ? this.subarray(begin) : this.subarray(begin, e nd);";
827 }
828
829 class Int32Array implements TypedArrayBufferView<int> native "Int32Array" {
830 final ArrayBuffer buffer;
831 final int byteOffset;
832 final int byteLength;
833
834 final int BYTES_PER_ELEMENT;
835 final int length;
836
837 Int32Array(int length) native;
838 factory Int32Array.fromArray(Int32Array array) native "return new Int32Array(a rray);";
839 factory Int32Array.fromList(List<int> list) native "return new Int32Array(list );";
840 factory Int32Array.fromArrayBuffer(ArrayBuffer buffer, [int byteOffset, int le ngth])
841 native """if (byteOffset === undefined) return new Int32Array(buffer);
842 if (length === undefined) return new Int32Array(buffer, byteOffset);
843 return new Int32Array(buffer, byteOffset, length);""";
844
845 // List protocol
846 int operator[](int index) native;
847 void operator[]=(int index, int value) native;
848 void _throwUnsupported() {
849 throw new UnsupportedOperationException('not extendable');
850 }
851 void add(int value) => _throwUnsupported();
852 void addAll(Collection<int> collection) => _throwUnsupported();
853 void addLast(int value) => _throwUnsupported();
854 void clear() => _throwUnsupported();
855 int indexOf(int element, [int start])
856 => FixedLists.indexOf(this, element, start);
857 void insertRange(int start, int length, [int initialValue])
858 => _throwUnsupported();
859 Int32Array getRange(int start, int length) {
860 FixedLists.getRangeCheck(this.length, start, length);
861 return new Int32Array.fromArray(subarray(start, start+length));
862 }
863 int last()
864 => FixedLists.last(this);
865 int lastIndexOf(int element, [int start])
866 => FixedLists.lastIndexOf(this, element, start);
867 int removeLast() => _throwUnsupported();
868 void removeRange(int start, int length) => _throwUnsupported();
869 void setRange(int start, int length, List<int> from, [int startFrom])
870 => _throwUnsupported();
871 void sort(int compare(int a, int b))
872 => DualPivotQuicksort.sort(this, compare);
873
874 // Collection<int> members:
875 void forEach(void f(int element)) => FixedLists.forEach(this, f);
876 Int32Array filter(bool f(int element))
877 => FixedLists.filter(this, f, (length) => new Int32Array(length));
878 Int32Array map(f(int))
879 => FixedLists.map(this, f, new Int32Array(this.length));
880 bool every(bool f(int element)) => FixedLists.every(this, f);
881 bool some(bool f(int element)) => FixedLists.some(this, f);
882 bool isEmpty() => FixedLists.isEmpty(this);
883
884 // Iterable<int> members:
885 Iterator<int> iterator() => new ListIterator(this);
886
887 void set(Int32Array array, [int offset]) native;
888 Int32Array subarray(int begin, [int end])
889 native "return end == null ? this.subarray(begin) : this.subarray(begin, e nd);";
890 }
891
892 class Uint32Array implements TypedArrayBufferView<int> native "Uint32Array" {
893 final ArrayBuffer buffer;
894 final int byteOffset;
895 final int byteLength;
896
897 final int BYTES_PER_ELEMENT;
898 final int length;
899
900 Uint32Array(int length) native;
901 factory Uint32Array.fromArray(Uint32Array array) native "return new Uint32Arra y(array);";
902 factory Uint32Array.fromList(List<int> list) native "return new Uint32Array(li st);";
903 factory Uint32Array.fromArrayBuffer(ArrayBuffer buffer, [int byteOffset, int l ength])
904 native """if (byteOffset === undefined) return new Uint32Array(buffer);
905 if (length === undefined) return new Uint32Array(buffer, byteOffset);
906 return new Uint32Array(buffer, byteOffset, length);""";
907
908 // List protocol
909 int operator[](int index) native;
910 void operator[]=(int index, int value) native;
911 void _throwUnsupported() {
912 throw new UnsupportedOperationException('not extendable');
913 }
914 void add(int value) => _throwUnsupported();
915 void addAll(Collection<int> collection) => _throwUnsupported();
916 void addLast(int value) => _throwUnsupported();
917 void clear() => _throwUnsupported();
918 int indexOf(int element, [int start])
919 => FixedLists.indexOf(this, element, start);
920 void insertRange(int start, int length, [int initialValue])
921 => _throwUnsupported();
922 Uint32Array getRange(int start, int length) {
923 FixedLists.getRangeCheck(this.length, start, length);
924 return new Uint32Array.fromArray(subarray(start, start+length));
925 }
926 int last()
927 => FixedLists.last(this);
928 int lastIndexOf(int element, [int start])
929 => FixedLists.lastIndexOf(this, element, start);
930 int removeLast() => _throwUnsupported();
931 void removeRange(int start, int length) => _throwUnsupported();
932 void setRange(int start, int length, List<int> from, [int startFrom])
933 => _throwUnsupported();
934 void sort(int compare(int a, int b))
935 => DualPivotQuicksort.sort(this, compare);
936
937 // Collection<int> members:
938 void forEach(void f(int element)) => FixedLists.forEach(this, f);
939 Uint32Array filter(bool f(int element))
940 => FixedLists.filter(this, f, (length) => new Uint32Array(length));
941 Uint32Array map(f(int))
942 => FixedLists.map(this, f, new Uint32Array(this.length));
943 bool every(bool f(int element)) => FixedLists.every(this, f);
944 bool some(bool f(int element)) => FixedLists.some(this, f);
945 bool isEmpty() => FixedLists.isEmpty(this);
946
947 // Iterable<int> members:
948 Iterator<int> iterator() => new ListIterator(this);
949
950 void set(Uint32Array array, [int offset]) native;
951 Uint32Array subarray(int begin, [int end])
952 native "return end == null ? this.subarray(begin) : this.subarray(begin, e nd);";
953 }
954
955 class Float32Array implements TypedArrayBufferView<num> native "Float32Array" {
956 final ArrayBuffer buffer;
957 final int byteOffset;
958 final int byteLength;
959
960 final int BYTES_PER_ELEMENT;
961 final int length;
962
963 Float32Array(int length) native;
964 factory Float32Array.fromArray(Float32Array array) native "return new Float32A rray(array);";
965 factory Float32Array.fromList(List<double> list) native "return new Float32Arr ay(list);";
966 factory Float32Array.fromArrayBuffer(ArrayBuffer buffer, [int byteOffset, int length])
967 native """if (byteOffset === undefined) return new Float32Array(buffer);
968 if (length === undefined) return new Float32Array(buffer, byteOffset);
969 return new Float32Array(buffer, byteOffset, length);""";
970
971 // List protocol
972 int operator[](int index) native;
973 void operator[]=(int index, int value) native;
974 void _throwUnsupported() {
975 throw new UnsupportedOperationException('not extendable');
976 }
977 void add(int value) => _throwUnsupported();
978 void addAll(Collection<int> collection) => _throwUnsupported();
979 void addLast(int value) => _throwUnsupported();
980 void clear() => _throwUnsupported();
981 int indexOf(int element, [int start])
982 => FixedLists.indexOf(this, element, start);
983 void insertRange(int start, int length, [int initialValue])
984 => _throwUnsupported();
985 Float32Array getRange(int start, int length) {
986 FixedLists.getRangeCheck(this.length, start, length);
987 return new Float32Array.fromArray(subarray(start, start+length));
988 }
989 int last()
990 => FixedLists.last(this);
991 int lastIndexOf(int element, [int start])
992 => FixedLists.lastIndexOf(this, element, start);
993 int removeLast() => _throwUnsupported();
994 void removeRange(int start, int length) => _throwUnsupported();
995 void setRange(int start, int length, List<int> from, [int startFrom])
996 => _throwUnsupported();
997 void sort(int compare(int a, int b))
998 => DualPivotQuicksort.sort(this, compare);
999
1000 // Collection<int> members:
1001 void forEach(void f(int element)) => FixedLists.forEach(this, f);
1002 Float32Array filter(bool f(int element))
1003 => FixedLists.filter(this, f, (length) => new Float32Array(length));
1004 Float32Array map(f(int))
1005 => FixedLists.map(this, f, new Float32Array(this.length));
1006 bool every(bool f(int element)) => FixedLists.every(this, f);
1007 bool some(bool f(int element)) => FixedLists.some(this, f);
1008 bool isEmpty() => FixedLists.isEmpty(this);
1009
1010 // Iterable<int> members:
1011 Iterator<int> iterator() => new ListIterator(this);
1012
1013 void set(Float32Array array, [int offset]) native;
1014 Float32Array subarray(int begin, [int end])
1015 native "return end == null ? this.subarray(begin) : this.subarray(begin, e nd);";
1016 }
1017
1018 class Float64Array implements TypedArrayBufferView<num> native "Float64Array" {
1019 final ArrayBuffer buffer;
1020 final int byteOffset;
1021 final int byteLength;
1022
1023 final int BYTES_PER_ELEMENT;
1024 final int length;
1025
1026 Float64Array(int length) native;
1027 factory Float64Array.fromArray(Float64Array array) native "return new Float64A rray(array);";
1028 factory Float64Array.fromList(List<double> list) native "return new Float64Arr ay(list);";
1029 factory Float64Array.fromArrayBuffer(ArrayBuffer buffer, [int byteOffset, int length])
1030 native """if (byteOffset === undefined) return new Float64Array(buffer);
1031 if (length === undefined) return new Float64Array(buffer, byteOffset);
1032 return new Float64Array(buffer, byteOffset, length);""";
1033
1034 // List protocol
1035 int operator[](int index) native;
1036 void operator[]=(int index, int value) native;
1037 void _throwUnsupported() {
1038 throw new UnsupportedOperationException('not extendable');
1039 }
1040 void add(int value) => _throwUnsupported();
1041 void addAll(Collection<int> collection) => _throwUnsupported();
1042 void addLast(int value) => _throwUnsupported();
1043 void clear() => _throwUnsupported();
1044 int indexOf(int element, [int start])
1045 => FixedLists.indexOf(this, element, start);
1046 void insertRange(int start, int length, [int initialValue])
1047 => _throwUnsupported();
1048 Float64Array getRange(int start, int length) {
1049 FixedLists.getRangeCheck(this.length, start, length);
1050 return new Float64Array.fromArray(subarray(start, start+length));
1051 }
1052 int last()
1053 => FixedLists.last(this);
1054 int lastIndexOf(int element, [int start])
1055 => FixedLists.lastIndexOf(this, element, start);
1056 int removeLast() => _throwUnsupported();
1057 void removeRange(int start, int length) => _throwUnsupported();
1058 void setRange(int start, int length, List<int> from, [int startFrom])
1059 => _throwUnsupported();
1060 void sort(int compare(int a, int b))
1061 => DualPivotQuicksort.sort(this, compare);
1062
1063 // Collection<int> members:
1064 void forEach(void f(int element)) => FixedLists.forEach(this, f);
1065 Float64Array filter(bool f(int element))
1066 => FixedLists.filter(this, f, (length) => new Float64Array(length));
1067 Float64Array map(f(int))
1068 => FixedLists.map(this, f, new Float64Array(this.length));
1069 bool every(bool f(int element)) => FixedLists.every(this, f);
1070 bool some(bool f(int element)) => FixedLists.some(this, f);
1071 bool isEmpty() => FixedLists.isEmpty(this);
1072
1073 // Iterable<int> members:
1074 Iterator<int> iterator() => new ListIterator(this);
1075 void set(Float64Array array, [int offset]) native;
1076 Float64Array subarray(int begin, [int end])
1077 native "return end == null ? this.subarray(begin) : this.subarray(begin, e nd);";
1078 }
1079
1080 class DataView implements ArrayBufferView native "DataView" {
1081 final ArrayBuffer buffer;
1082 final int byteOffset;
1083 final int byteLength;
1084
1085 DataView.fromArray(ArrayBuffer buffer, [int byteOffset, int byteLength])
1086 native """if (byteOffset === undefined) return new DataView(buffer);
1087 if (length === undefined) return new DataView(buffer, byteOffset);
1088 return new DataView(buffer, byteOffset, length);""";
1089
1090 int getInt8(int byteOffset) native;
1091 int getUint8(int byteOffset) native;
1092 int getInt16(int byteOffset, [bool littleEndian=false]) native;
1093 int getUint16(int byteOffset, [bool littleEndian=false]) native;
1094 int getInt32(int byteOffset, [bool littleEndian=false]) native;
1095 int getUint32(int byteOffset, [bool littleEndian=false]) native;
1096 num getFloat32(int byteOffset, [bool littleEndian=false]) native;
1097 num getFloat64(int byteOffset, [bool littleEndian=false]) native;
1098
1099 void setInt8(int byteOffset, int value) native;
1100 void setUint8(int byteOffset, int value) native;
1101 void setInt16(int byteOffset, int value, [bool littleEndian=false]) native;
1102 void setUint16(int byteOffset, int value, [bool littleEndian=false]) native;
1103 void setInt32(int byteOffset, int value, [bool littleEndian=false]) native;
1104 void setUint32(int byteOffset, int value, [bool littleEndian=false]) native;
1105 void setFloat32(int byteOffset, num value, [bool littleEndian=false]) native;
1106 void setFloat64(int byteOffset, num value, [bool littleEndian=false]) native;
1107 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698