jswrapper.c 52 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203
  1. // Automatically generated wrapper file
  2. // Generated by scripts/build_jsfunctions.py
  3. #include "jswrapper.h"
  4. #include "src/jswrap_pin.h"
  5. #include "src/jswrap_functions.h"
  6. #include "src/jswrap_modules.h"
  7. #include "src/jswrap_process.h"
  8. #include "src/jswrap_interactive.h"
  9. #include "src/jswrap_json.h"
  10. #include "src/jswrap_object.h"
  11. #include "src/jswrap_string.h"
  12. #include "src/jswrap_array.h"
  13. #include "src/jswrap_arraybuffer.h"
  14. #include "src/jswrap_serial.h"
  15. #include "src/jswrap_spi_i2c.h"
  16. #include "src/jswrap_onewire.h"
  17. #include "src/jswrap_io.h"
  18. #include "libs/jswrap_math.h"
  19. #if( 'q\0\0\0' & 'q' )
  20. #error( "architecture is big-endian. need to test and make sure this still works" )
  21. #endif
  22. // beware big endian!
  23. #define CH2(a,b) ( ((b)<<8) | (a) )
  24. #define CH4(a,b,c,d) ( ((d)<<24) | ((c)<<16) | ((b)<<8) | (a) )
  25. #define CMP2(var, a,b) ((*(unsigned short*)&var)==CH2(a,b))
  26. #define CMP3(var, a,b,c) (((*(unsigned int*)&var)&0x00FFFFFF)==CH4(a,b,c,0))
  27. #define CMP4(var, a,b,c,d) ((*(unsigned int*)&var)==CH4(a,b,c,d))
  28. JsVar *jswHandleFunctionCall(JsVar *parent, JsVar *parentName, const char *name) {
  29. if (parent) {
  30. // ------------------------------------------ METHODS ON OBJECT
  31. if (CMP4(name[0],'c','l','o','n') && CMP2(name[4],'e','\0')) {
  32. // Object.clone (src/jswrap_object.c)
  33. jspParseEmptyFunction();
  34. JsVar *_r = jswrap_object_clone(parent);
  35. return _r;
  36. } else if (CMP4(name[0],'e','m','i','t') && name[4]=='\0') {
  37. // Object.emit (src/jswrap_object.c)
  38. JsVar *event, *v1, *v2;
  39. jspParseFunction(0, &event, &v1, &v2, 0);
  40. jswrap_object_emit(parent, event, v1, v2);
  41. jsvUnLock(event);
  42. jsvUnLock(v1);
  43. jsvUnLock(v2);
  44. return 0;
  45. } else if (CMP4(name[0],'l','e','n','g') && CMP3(name[4],'t','h','\0')) {
  46. // Object.length (src/jswrap_object.c)
  47. jspParseVariableName();
  48. JsVar *_r = jswrap_object_length(parent);
  49. return _r;
  50. } else if (CMP3(name[0],'o','n','\0')) {
  51. // Object.on (src/jswrap_object.c)
  52. JsVar *event, *listener;
  53. jspParseFunction(0, &event, &listener, 0, 0);
  54. jswrap_object_on(parent, event, listener);
  55. jsvUnLock(event);
  56. jsvUnLock(listener);
  57. return 0;
  58. } else if (CMP4(name[0],'r','e','m','o') && CMP4(name[4],'v','e','A','l') && CMP4(name[8],'l','L','i','s') && CMP4(name[12],'t','e','n','e') && CMP3(name[16],'r','s','\0')) {
  59. // Object.removeAllListeners (src/jswrap_object.c)
  60. JsVar *event = jspParseSingleFunction();
  61. jswrap_object_removeAllListeners(parent, event);
  62. jsvUnLock(event);
  63. return 0;
  64. } else if (CMP4(name[0],'t','o','S','t') && CMP4(name[4],'r','i','n','g') && name[8]=='\0') {
  65. // Object.toString (src/jswrap_object.c)
  66. JsVar *radix = jspParseSingleFunction();
  67. JsVar *_r = jswrap_object_toString(parent, radix);
  68. jsvUnLock(radix);
  69. return _r;
  70. }
  71. // ------------------------------------------ INSTANCE + STATIC METHODS
  72. if (CMP4(parent->varData.str[0],'p','r','o','c') && CMP4(parent->varData.str[4],'e','s','s','\0')) {
  73. if (CMP4(name[0],'m','e','m','o') && CMP3(name[4],'r','y','\0')) {
  74. // process.memory (src/jswrap_process.c)
  75. jspParseEmptyFunction();
  76. JsVar *_r = jswrap_process_memory();
  77. return _r;
  78. } else if (CMP4(name[0],'e','n','v','\0')) {
  79. // process.env (src/jswrap_process.c)
  80. jspParseVariableName();
  81. JsVar *_r = jswrap_process_env();
  82. return _r;
  83. } else if (CMP4(name[0],'v','e','r','s') && CMP4(name[4],'i','o','n','\0')) {
  84. // process.version (src/jswrap_process.c)
  85. jspParseVariableName();
  86. JsVar *_r = jsvNewFromString(JS_VERSION);
  87. return _r;
  88. }
  89. }
  90. if (CMP4(parent->varData.str[0],'O','b','j','e') && CMP3(parent->varData.str[4],'c','t','\0')) {
  91. if (CMP4(name[0],'k','e','y','s') && name[4]=='\0') {
  92. // Object.keys (src/jswrap_object.c)
  93. JsVar *object = jspParseSingleFunction();
  94. JsVar *_r = jswrap_object_keys(object);
  95. jsvUnLock(object);
  96. return _r;
  97. }
  98. }
  99. if (jsvIsFunction(parent)) {
  100. if (CMP4(name[0],'a','p','p','l') && CMP2(name[4],'y','\0')) {
  101. // Function.apply (src/jswrap_object.c)
  102. JsVar *this, *args;
  103. jspParseFunction(0, &this, &args, 0, 0);
  104. JsVar *_r = jswrap_function_apply(parent, this, args);
  105. jsvUnLock(this);
  106. jsvUnLock(args);
  107. return _r;
  108. } else if (CMP4(name[0],'c','a','l','l') && name[4]=='\0') {
  109. // Function.call (src/jswrap_object.c)
  110. JsVar *this, *a, *b, *c, *d;
  111. jspParseFunction8(0, &this, &a, &b, &c, &d, 0, 0, 0);
  112. JsVar *_r = jswrap_function_call(parent, this, a, b, c, d);
  113. jsvUnLock(this);
  114. jsvUnLock(a);
  115. jsvUnLock(b);
  116. jsvUnLock(c);
  117. jsvUnLock(d);
  118. return _r;
  119. } else if (CMP4(name[0],'r','e','p','l') && CMP4(name[4],'a','c','e','W') && CMP4(name[8],'i','t','h','\0')) {
  120. // Function.replaceWith (src/jswrap_object.c)
  121. JsVar *newFunc = jspParseSingleFunction();
  122. jswrap_function_replaceWith(parent, newFunc);
  123. jsvUnLock(newFunc);
  124. return 0;
  125. }
  126. }
  127. if (CMP4(parent->varData.str[0],'M','o','d','u') && CMP4(parent->varData.str[4],'l','e','s','\0')) {
  128. if (CMP4(name[0],'a','d','d','C') && CMP4(name[4],'a','c','h','e') && CMP2(name[8],'d','\0')) {
  129. // Modules.addCached (src/jswrap_modules.c)
  130. JsVar *id, *sourcecode;
  131. jspParseFunction(0, &id, &sourcecode, 0, 0);
  132. jswrap_modules_addCached(id, sourcecode);
  133. jsvUnLock(id);
  134. jsvUnLock(sourcecode);
  135. return 0;
  136. } else if (CMP4(name[0],'r','e','m','o') && CMP2(name[4],'v','e')) {
  137. if (CMP4(name[6],'A','l','l','C') && CMP4(name[10],'a','c','h','e') && CMP2(name[14],'d','\0')) {
  138. // Modules.removeAllCached (src/jswrap_modules.c)
  139. jspParseEmptyFunction();
  140. jswrap_modules_removeAllCached();
  141. return 0;
  142. } else if (CMP4(name[6],'C','a','c','h') && CMP3(name[10],'e','d','\0')) {
  143. // Modules.removeCached (src/jswrap_modules.c)
  144. JsVar *id = jspParseSingleFunction();
  145. jswrap_modules_removeCached(id);
  146. jsvUnLock(id);
  147. return 0;
  148. }
  149. } else if (CMP4(name[0],'g','e','t','C') && CMP4(name[4],'a','c','h','e') && CMP2(name[8],'d','\0')) {
  150. // Modules.getCached (src/jswrap_modules.c)
  151. jspParseEmptyFunction();
  152. JsVar *_r = jswrap_modules_getCached();
  153. return _r;
  154. }
  155. }
  156. if (jsvIsArrayBuffer(parent) && parent->varData.arraybuffer.type!=ARRAYBUFFERVIEW_ARRAYBUFFER) {
  157. if (CMP4(name[0],'i','n','t','e') && CMP4(name[4],'r','p','o','l') && CMP3(name[8],'a','t','e')) {
  158. if (CMP3(name[11],'2','d','\0')) {
  159. // ArrayBufferView.interpolate2d (src/jswrap_arraybuffer.c)
  160. JsVar *width, *x, *y;
  161. jspParseFunction(0, &width, &x, &y, 0);
  162. JsVar *_r = jsvNewFromFloat(jswrap_arraybufferview_interpolate2d(parent, jsvGetIntegerAndUnLock(width), jsvGetFloatAndUnLock(x), jsvGetFloatAndUnLock(y)));
  163. return _r;
  164. } else if (name[11]==0) {
  165. // ArrayBufferView.interpolate (src/jswrap_arraybuffer.c)
  166. JsVar *index = jspParseSingleFunction();
  167. JsVar *_r = jsvNewFromFloat(jswrap_arraybufferview_interpolate(parent, jsvGetFloatAndUnLock(index)));
  168. return _r;
  169. }
  170. } else if (name[0]=='b') {
  171. if (CMP3(name[1],'y','t','e')) {
  172. if (CMP4(name[4],'L','e','n','g') && CMP3(name[8],'t','h','\0')) {
  173. // ArrayBufferView.byteLength (src/jswrap_arraybuffer.c)
  174. jspParseVariableName();
  175. JsVar *_r = jsvNewFromInteger(parent->varData.arraybuffer.length * JSV_ARRAYBUFFER_GET_SIZE(parent->varData.arraybuffer.type));
  176. return _r;
  177. } else if (CMP4(name[4],'O','f','f','s') && CMP3(name[8],'e','t','\0')) {
  178. // ArrayBufferView.byteOffset (src/jswrap_arraybuffer.c)
  179. jspParseVariableName();
  180. JsVar *_r = jsvNewFromInteger(parent->varData.arraybuffer.byteOffset);
  181. return _r;
  182. }
  183. } else if (CMP4(name[1],'u','f','f','e') && CMP2(name[5],'r','\0')) {
  184. // ArrayBufferView.buffer (src/jswrap_arraybuffer.c)
  185. jspParseVariableName();
  186. JsVar *_r = jsvLock(parent->firstChild);
  187. return _r;
  188. }
  189. }
  190. }
  191. if (jsvIsPin(parent)) {
  192. if (CMP4(name[0],'s','e','t','\0')) {
  193. // Pin.set (src/jswrap_pin.c)
  194. jspParseEmptyFunction();
  195. jswrap_pin_set(parent);
  196. return 0;
  197. } else if (CMP2(name[0],'r','e')) {
  198. if (CMP3(name[2],'a','d','\0')) {
  199. // Pin.read (src/jswrap_pin.c)
  200. jspParseEmptyFunction();
  201. JsVar *_r = jsvNewFromBool(jswrap_pin_read(parent));
  202. return _r;
  203. } else if (CMP4(name[2],'s','e','t','\0')) {
  204. // Pin.reset (src/jswrap_pin.c)
  205. jspParseEmptyFunction();
  206. jswrap_pin_reset(parent);
  207. return 0;
  208. }
  209. } else if (CMP4(name[0],'w','r','i','t') && name[4]=='e') {
  210. if (CMP4(name[5],'A','t','T','i') && CMP3(name[9],'m','e','\0')) {
  211. // Pin.writeAtTime (src/jswrap_pin.c)
  212. JsVar *value, *time;
  213. jspParseFunction(0, &value, &time, 0, 0);
  214. jswrap_pin_writeAtTime(parent, jsvGetBoolAndUnLock(value), jsvGetFloatAndUnLock(time));
  215. return 0;
  216. } else if (name[5]==0) {
  217. // Pin.write (src/jswrap_pin.c)
  218. JsVar *value = jspParseSingleFunction();
  219. jswrap_pin_write(parent, jsvGetBoolAndUnLock(value));
  220. return 0;
  221. }
  222. }
  223. }
  224. if (jsvIsString(parent)) {
  225. if (CMP4(name[0],'i','n','d','e') && CMP4(name[4],'x','O','f','\0')) {
  226. // String.indexOf (src/jswrap_string.c)
  227. JsVar *substring = jspParseSingleFunction();
  228. JsVar *_r = jsvNewFromInteger(jswrap_string_indexOf(parent, substring));
  229. jsvUnLock(substring);
  230. return _r;
  231. } else if (CMP4(name[0],'c','h','a','r')) {
  232. if (CMP3(name[4],'A','t','\0')) {
  233. // String.charAt (src/jswrap_string.c)
  234. JsVar *pos = jspParseSingleFunction();
  235. JsVar *_r = jswrap_string_charAt(parent, jsvGetIntegerAndUnLock(pos));
  236. return _r;
  237. } else if (CMP4(name[4],'C','o','d','e') && CMP3(name[8],'A','t','\0')) {
  238. // String.charCodeAt (src/jswrap_string.c)
  239. JsVar *pos = jspParseSingleFunction();
  240. JsVar *_r = jsvNewFromInteger(jswrap_string_charCodeAt(parent, jsvGetIntegerAndUnLock(pos)));
  241. return _r;
  242. }
  243. } else if (name[0]=='s') {
  244. if (CMP4(name[1],'p','l','i','t') && name[5]=='\0') {
  245. // String.split (src/jswrap_string.c)
  246. JsVar *separator = jspParseSingleFunction();
  247. JsVar *_r = jswrap_string_split(parent, separator);
  248. jsvUnLock(separator);
  249. return _r;
  250. } else if (CMP4(name[1],'u','b','s','t') && name[5]=='r') {
  251. if (CMP4(name[6],'i','n','g','\0')) {
  252. // String.substring (src/jswrap_string.c)
  253. JsVar *start, *end;
  254. jspParseFunction(0, &start, &end, 0, 0);
  255. JsVar *_r = jswrap_string_substring(parent, jsvGetIntegerAndUnLock(start), end);
  256. jsvUnLock(end);
  257. return _r;
  258. } else if (name[6]==0) {
  259. // String.substr (src/jswrap_string.c)
  260. JsVar *start, *len;
  261. jspParseFunction(0, &start, &len, 0, 0);
  262. JsVar *_r = jswrap_string_substr(parent, jsvGetIntegerAndUnLock(start), len);
  263. jsvUnLock(len);
  264. return _r;
  265. }
  266. }
  267. }
  268. }
  269. if (CMP4(parent->varData.str[0],'M','a','t','h') && parent->varData.str[4]=='\0') {
  270. if (name[0]=='a') {
  271. if (CMP4(name[1],'c','o','s','\0')) {
  272. // Math.acos (libs/jswrap_math.c)
  273. JsVar *x = jspParseSingleFunction();
  274. JsVar *_r = jsvNewFromFloat(acos(jsvGetFloatAndUnLock(x)));
  275. return _r;
  276. } else if (CMP3(name[1],'b','s','\0')) {
  277. // Math.abs (libs/jswrap_math.c)
  278. JsVar *x = jspParseSingleFunction();
  279. JsVar *_r = jsvNewFromFloat(jswrap_math_abs(jsvGetFloatAndUnLock(x)));
  280. return _r;
  281. } else if (CMP4(name[1],'s','i','n','\0')) {
  282. // Math.asin (libs/jswrap_math.c)
  283. JsVar *x = jspParseSingleFunction();
  284. JsVar *_r = jsvNewFromFloat(asin(jsvGetFloatAndUnLock(x)));
  285. return _r;
  286. } else if (CMP3(name[1],'t','a','n')) {
  287. if (CMP2(name[4],'2','\0')) {
  288. // Math.atan2 (libs/jswrap_math.c)
  289. JsVar *y, *x;
  290. jspParseFunction(0, &y, &x, 0, 0);
  291. JsVar *_r = jsvNewFromFloat(atan2(jsvGetFloatAndUnLock(y), jsvGetFloatAndUnLock(x)));
  292. return _r;
  293. } else if (name[4]==0) {
  294. // Math.atan (libs/jswrap_math.c)
  295. JsVar *x = jspParseSingleFunction();
  296. JsVar *_r = jsvNewFromFloat(atan(jsvGetFloatAndUnLock(x)));
  297. return _r;
  298. }
  299. }
  300. } else if (name[0]=='c') {
  301. if (CMP4(name[1],'e','i','l','\0')) {
  302. // Math.ceil (libs/jswrap_math.c)
  303. JsVar *x = jspParseSingleFunction();
  304. JsVar *_r = jsvNewFromFloat(ceil(jsvGetFloatAndUnLock(x)));
  305. return _r;
  306. } else if (CMP4(name[1],'l','i','p','\0')) {
  307. // Math.clip (libs/jswrap_math.c)
  308. JsVar *x, *min, *max;
  309. jspParseFunction(0, &x, &min, &max, 0);
  310. JsVar *_r = jsvNewFromFloat(jswrap_math_clip(jsvGetFloatAndUnLock(x), jsvGetFloatAndUnLock(min), jsvGetFloatAndUnLock(max)));
  311. return _r;
  312. } else if (CMP3(name[1],'o','s','\0')) {
  313. // Math.cos (libs/jswrap_math.c)
  314. JsVar *theta = jspParseSingleFunction();
  315. JsVar *_r = jsvNewFromFloat(sin(jsvGetFloat(theta) + (3.14159265359/2.0)));
  316. jsvUnLock(theta);
  317. return _r;
  318. }
  319. } else if (CMP2(name[0],'E','\0')) {
  320. // Math.E (libs/jswrap_math.c)
  321. jspParseVariableName();
  322. JsVar *_r = jsvNewFromFloat(2.71828182846);
  323. return _r;
  324. } else if (CMP4(name[0],'p','o','w','\0')) {
  325. // Math.pow (libs/jswrap_math.c)
  326. JsVar *x, *y;
  327. jspParseFunction(0, &x, &y, 0, 0);
  328. JsVar *_r = jsvNewFromFloat(jswrap_math_pow(jsvGetFloatAndUnLock(x), jsvGetFloatAndUnLock(y)));
  329. return _r;
  330. } else if (CMP4(name[0],'f','l','o','o') && CMP2(name[4],'r','\0')) {
  331. // Math.floor (libs/jswrap_math.c)
  332. JsVar *x = jspParseSingleFunction();
  333. JsVar *_r = jsvNewFromFloat(floor(jsvGetFloatAndUnLock(x)));
  334. return _r;
  335. } else if (CMP4(name[0],'l','o','g','\0')) {
  336. // Math.log (libs/jswrap_math.c)
  337. JsVar *x = jspParseSingleFunction();
  338. JsVar *_r = jsvNewFromFloat(log(jsvGetFloatAndUnLock(x)));
  339. return _r;
  340. } else if (CMP3(name[0],'P','I','\0')) {
  341. // Math.PI (libs/jswrap_math.c)
  342. jspParseVariableName();
  343. JsVar *_r = jsvNewFromFloat(3.14159265359);
  344. return _r;
  345. } else if (name[0]=='s') {
  346. if (CMP3(name[1],'i','n','\0')) {
  347. // Math.sin (libs/jswrap_math.c)
  348. JsVar *theta = jspParseSingleFunction();
  349. JsVar *_r = jsvNewFromFloat(sin(jsvGetFloatAndUnLock(theta)));
  350. return _r;
  351. } else if (CMP4(name[1],'q','r','t','\0')) {
  352. // Math.sqrt (libs/jswrap_math.c)
  353. JsVar *x = jspParseSingleFunction();
  354. JsVar *_r = jsvNewFromFloat(jswrap_math_pow(jsvGetFloat(x),0.5));
  355. jsvUnLock(x);
  356. return _r;
  357. }
  358. } else if (name[0]=='r') {
  359. if (CMP4(name[1],'a','n','d','o') && CMP2(name[5],'m','\0')) {
  360. // Math.random (libs/jswrap_math.c)
  361. jspParseEmptyFunction();
  362. JsVar *_r = jsvNewFromFloat((JsVarFloat)rand() / (JsVarFloat)RAND_MAX);
  363. return _r;
  364. } else if (CMP4(name[1],'o','u','n','d') && name[5]=='\0') {
  365. // Math.round (libs/jswrap_math.c)
  366. JsVar *x = jspParseSingleFunction();
  367. JsVar *_r = jsvNewFromInteger((JsVarInt)round(jsvGetFloatAndUnLock(x)));
  368. return _r;
  369. }
  370. } else if (CMP4(name[0],'w','r','a','p') && name[4]=='\0') {
  371. // Math.wrap (libs/jswrap_math.c)
  372. JsVar *x, *max;
  373. jspParseFunction(0, &x, &max, 0, 0);
  374. JsVar *_r = jsvNewFromFloat(wrapAround(jsvGetFloatAndUnLock(x), jsvGetFloatAndUnLock(max)));
  375. return _r;
  376. } else if (CMP4(name[0],'e','x','p','\0')) {
  377. // Math.exp (libs/jswrap_math.c)
  378. JsVar *x = jspParseSingleFunction();
  379. JsVar *_r = jsvNewFromFloat(exp(jsvGetFloatAndUnLock(x)));
  380. return _r;
  381. }
  382. }
  383. if (CMP4(parent->varData.str[0],'D','o','u','b') && CMP3(parent->varData.str[4],'l','e','\0')) {
  384. if (CMP4(name[0],'d','o','u','b') && CMP4(name[4],'l','e','T','o') && CMP4(name[8],'I','n','t','B') && CMP4(name[12],'i','t','s','\0')) {
  385. // Double.doubleToIntBits (libs/jswrap_math.c)
  386. JsVar *x = jspParseSingleFunction();
  387. JsVar *_r = jsvNewFromInteger(*(JsVarInt*)&x);
  388. jsvUnLock(x);
  389. return _r;
  390. }
  391. }
  392. if (jsvIsArray(parent)) {
  393. if (CMP4(name[0],'c','o','n','t') && CMP4(name[4],'a','i','n','s') && name[8]=='\0') {
  394. // Array.contains (src/jswrap_array.c)
  395. JsVar *value = jspParseSingleFunction();
  396. JsVar *_r = jsvNewFromBool(jswrap_array_contains(parent, value));
  397. jsvUnLock(value);
  398. return _r;
  399. } else if (CMP4(name[0],'f','o','r','E') && CMP4(name[4],'a','c','h','\0')) {
  400. // Array.forEach (src/jswrap_array.c)
  401. JsVar *function, *thisArg;
  402. jspParseFunction(0, &function, &thisArg, 0, 0);
  403. jswrap_array_forEach(parent, function, thisArg);
  404. jsvUnLock(function);
  405. jsvUnLock(thisArg);
  406. return 0;
  407. } else if (CMP4(name[0],'i','n','d','e') && CMP4(name[4],'x','O','f','\0')) {
  408. // Array.indexOf (src/jswrap_array.c)
  409. JsVar *value = jspParseSingleFunction();
  410. JsVar *_r = jswrap_array_indexOf(parent, value);
  411. jsvUnLock(value);
  412. return _r;
  413. } else if (CMP4(name[0],'j','o','i','n') && name[4]=='\0') {
  414. // Array.join (src/jswrap_array.c)
  415. JsVar *separator = jspParseSingleFunction();
  416. JsVar *_r = jswrap_array_join(parent, separator);
  417. jsvUnLock(separator);
  418. return _r;
  419. } else if (CMP4(name[0],'m','a','p','\0')) {
  420. // Array.map (src/jswrap_array.c)
  421. JsVar *function, *thisArg;
  422. jspParseFunction(0, &function, &thisArg, 0, 0);
  423. JsVar *_r = jswrap_array_map(parent, function, thisArg);
  424. jsvUnLock(function);
  425. jsvUnLock(thisArg);
  426. return _r;
  427. } else if (name[0]=='p') {
  428. if (CMP4(name[1],'u','s','h','\0')) {
  429. // Array.push (src/jswrap_array.c)
  430. JsVar *value = jspParseSingleFunction();
  431. JsVar *_r = jsvNewFromInteger(jsvArrayPush(parent, value));
  432. jsvUnLock(value);
  433. return _r;
  434. } else if (CMP3(name[1],'o','p','\0')) {
  435. // Array.pop (src/jswrap_array.c)
  436. jspParseEmptyFunction();
  437. JsVar *_r = jsvArrayPop(parent);
  438. return _r;
  439. }
  440. } else if (name[0]=='s') {
  441. if (CMP4(name[1],'p','l','i','c') && CMP2(name[5],'e','\0')) {
  442. // Array.splice (src/jswrap_array.c)
  443. JsVar *index, *howMany, *element1, *element2, *element3, *element4, *element5, *element6;
  444. jspParseFunction8(0, &index, &howMany, &element1, &element2, &element3, &element4, &element5, &element6);
  445. JsVar *_r = jswrap_array_splice(parent, jsvGetIntegerAndUnLock(index), howMany, element1, element2, element3, element4, element5, element6);
  446. jsvUnLock(howMany);
  447. jsvUnLock(element1);
  448. jsvUnLock(element2);
  449. jsvUnLock(element3);
  450. jsvUnLock(element4);
  451. jsvUnLock(element5);
  452. jsvUnLock(element6);
  453. return _r;
  454. } else if (CMP4(name[1],'l','i','c','e') && name[5]=='\0') {
  455. // Array.slice (src/jswrap_array.c)
  456. JsVar *start, *end;
  457. jspParseFunction(0, &start, &end, 0, 0);
  458. JsVar *_r = jswrap_array_slice(parent, start, end);
  459. jsvUnLock(start);
  460. jsvUnLock(end);
  461. return _r;
  462. }
  463. }
  464. }
  465. if (CMP4(parent->varData.str[0],'c','o','n','s') && CMP4(parent->varData.str[4],'o','l','e','\0')) {
  466. if (CMP4(name[0],'l','o','g','\0')) {
  467. // console.log (src/jswrap_interactive.c)
  468. JsVar *text = jspParseFunctionAsArray();
  469. if (!text) return 0; // if parse error
  470. jswrap_interface_print(text);
  471. jsvUnLock(text);
  472. return 0;
  473. }
  474. }
  475. if (CMP4(parent->varData.str[0],'J','S','O','N') && parent->varData.str[4]=='\0') {
  476. if (CMP4(name[0],'p','a','r','s') && CMP2(name[4],'e','\0')) {
  477. // JSON.parse (src/jswrap_json.c)
  478. JsVar *string = jspParseSingleFunction();
  479. JsVar *_r = jswrap_json_parse(string);
  480. jsvUnLock(string);
  481. return _r;
  482. } else if (CMP4(name[0],'s','t','r','i') && CMP4(name[4],'n','g','i','f') && CMP2(name[8],'y','\0')) {
  483. // JSON.stringify (src/jswrap_json.c)
  484. JsVar *data = jspParseSingleFunction();
  485. JsVar *_r = jswrap_json_stringify(data);
  486. jsvUnLock(data);
  487. return _r;
  488. }
  489. }
  490. if (CMP4(parent->varData.str[0],'S','t','r','i') && CMP3(parent->varData.str[4],'n','g','\0')) {
  491. if (CMP4(name[0],'f','r','o','m') && CMP4(name[4],'C','h','a','r') && CMP4(name[8],'C','o','d','e') && name[12]=='\0') {
  492. // String.fromCharCode (src/jswrap_string.c)
  493. JsVar *code = jspParseSingleFunction();
  494. JsVar *_r = jswrap_string_fromCharCode(jsvGetIntegerAndUnLock(code));
  495. return _r;
  496. }
  497. }
  498. if (CMP4(parent->varData.str[0],'I','n','t','e') && CMP4(parent->varData.str[4],'g','e','r','\0')) {
  499. if (CMP4(name[0],'v','a','l','u') && CMP4(name[4],'e','O','f','\0')) {
  500. // Integer.valueOf (libs/jswrap_math.c)
  501. JsVar *character = jspParseSingleFunction();
  502. JsVar *_r = jsvNewFromInteger(jswrap_integer_valueOf(character));
  503. jsvUnLock(character);
  504. return _r;
  505. }
  506. }
  507. // ------------------------------------------ INSTANCE METHODS WE MUST CHECK CONSTRUCTOR FOR
  508. JsVar *constructorName = jsvIsObject(parent)?jsvSkipOneNameAndUnLock(jsvFindChildFromString(parent, JSPARSE_CONSTRUCTOR_VAR, false)):0;
  509. if (constructorName && jsvIsName(constructorName)) {
  510. if (CMP4(constructorName->varData.str[0],'S','e','r','i') && CMP3(constructorName->varData.str[4],'a','l','\0')) {
  511. jsvUnLock(constructorName);constructorName=0;
  512. if (CMP4(name[0],'p','r','i','n') && name[4]=='t') {
  513. if (CMP3(name[5],'l','n','\0')) {
  514. // Serial.println (src/jswrap_serial.c)
  515. JsVar *string = jspParseSingleFunction();
  516. jswrap_serial_println(parent, string);
  517. jsvUnLock(string);
  518. return 0;
  519. } else if (name[5]==0) {
  520. // Serial.print (src/jswrap_serial.c)
  521. JsVar *string = jspParseSingleFunction();
  522. jswrap_serial_print(parent, string);
  523. jsvUnLock(string);
  524. return 0;
  525. }
  526. } else if (CMP3(name[0],'s','e','t')) {
  527. if (CMP4(name[3],'C','o','n','s') && CMP4(name[7],'o','l','e','\0')) {
  528. // Serial.setConsole (src/jswrap_serial.c)
  529. jspParseEmptyFunction();
  530. jsiSetConsoleDevice(jsiGetDeviceFromClass(parent));
  531. return 0;
  532. } else if (CMP3(name[3],'u','p','\0')) {
  533. // Serial.setup (src/jswrap_serial.c)
  534. JsVar *baudrate, *options;
  535. jspParseFunction(0, &baudrate, &options, 0, 0);
  536. jswrap_serial_setup(parent, jsvGetIntegerAndUnLock(baudrate), options);
  537. jsvUnLock(options);
  538. return 0;
  539. }
  540. } else if (CMP4(name[0],'o','n','D','a') && CMP3(name[4],'t','a','\0')) {
  541. // Serial.onData (src/jswrap_serial.c)
  542. JsVar *function;
  543. jspParseFunction(0|JSP_NOSKIP_A, &function, 0, 0, 0);
  544. jswrap_serial_onData(parent, function);
  545. jsvUnLock(function);
  546. return 0;
  547. } else if (CMP4(name[0],'w','r','i','t') && CMP2(name[4],'e','\0')) {
  548. // Serial.write (src/jswrap_serial.c)
  549. JsVar *data = jspParseSingleFunction();
  550. jswrap_serial_write(parent, data);
  551. jsvUnLock(data);
  552. return 0;
  553. }
  554. } else if (CMP4(constructorName->varData.str[0],'O','n','e','W') && CMP4(constructorName->varData.str[4],'i','r','e','\0')) {
  555. jsvUnLock(constructorName);constructorName=0;
  556. if (name[0]=='s') {
  557. if (CMP4(name[1],'k','i','p','\0')) {
  558. // OneWire.skip (src/jswrap_onewire.c)
  559. jspParseEmptyFunction();
  560. jswrap_onewire_skip(parent);
  561. return 0;
  562. } else if (name[1]=='e') {
  563. if (CMP4(name[2],'a','r','c','h') && name[6]=='\0') {
  564. // OneWire.search (src/jswrap_onewire.c)
  565. jspParseEmptyFunction();
  566. JsVar *_r = jswrap_onewire_search(parent);
  567. return _r;
  568. } else if (CMP4(name[2],'l','e','c','t') && name[6]=='\0') {
  569. // OneWire.select (src/jswrap_onewire.c)
  570. JsVar *rom = jspParseSingleFunction();
  571. jswrap_onewire_select(parent, jsvGetIntegerAndUnLock(rom));
  572. return 0;
  573. }
  574. }
  575. } else if (CMP2(name[0],'r','e')) {
  576. if (CMP3(name[2],'a','d','\0')) {
  577. // OneWire.read (src/jswrap_onewire.c)
  578. jspParseEmptyFunction();
  579. JsVar *_r = jsvNewFromInteger(jswrap_onewire_read(parent));
  580. return _r;
  581. } else if (CMP4(name[2],'s','e','t','\0')) {
  582. // OneWire.reset (src/jswrap_onewire.c)
  583. jspParseEmptyFunction();
  584. JsVar *_r = jsvNewFromBool(jswrap_onewire_reset(parent));
  585. return _r;
  586. }
  587. } else if (CMP4(name[0],'w','r','i','t') && CMP2(name[4],'e','\0')) {
  588. // OneWire.write (src/jswrap_onewire.c)
  589. JsVar *data, *power;
  590. jspParseFunction(0, &data, &power, 0, 0);
  591. jswrap_onewire_write(parent, jsvGetIntegerAndUnLock(data), jsvGetBoolAndUnLock(power));
  592. return 0;
  593. }
  594. } else if (CMP4(constructorName->varData.str[0],'I','2','C','\0')) {
  595. jsvUnLock(constructorName);constructorName=0;
  596. if (CMP4(name[0],'s','e','t','u') && CMP2(name[4],'p','\0')) {
  597. // I2C.setup (src/jswrap_spi_i2c.c)
  598. JsVar *options = jspParseSingleFunction();
  599. jswrap_i2c_setup(parent, options);
  600. jsvUnLock(options);
  601. return 0;
  602. } else if (CMP4(name[0],'r','e','a','d') && CMP4(name[4],'F','r','o','m') && name[8]=='\0') {
  603. // I2C.readFrom (src/jswrap_spi_i2c.c)
  604. JsVar *address, *quantity;
  605. jspParseFunction(0, &address, &quantity, 0, 0);
  606. JsVar *_r = jswrap_i2c_readFrom(parent, jsvGetIntegerAndUnLock(address), jsvGetIntegerAndUnLock(quantity));
  607. return _r;
  608. } else if (CMP4(name[0],'w','r','i','t') && CMP4(name[4],'e','T','o','\0')) {
  609. // I2C.writeTo (src/jswrap_spi_i2c.c)
  610. JsVar *address, *data;
  611. jspParseFunction(0, &address, &data, 0, 0);
  612. jswrap_i2c_writeTo(parent, jsvGetIntegerAndUnLock(address), data);
  613. jsvUnLock(data);
  614. return 0;
  615. }
  616. } else if (CMP4(constructorName->varData.str[0],'S','P','I','\0')) {
  617. jsvUnLock(constructorName);constructorName=0;
  618. if (CMP2(name[0],'s','e')) {
  619. if (CMP4(name[2],'t','u','p','\0')) {
  620. // SPI.setup (src/jswrap_spi_i2c.c)
  621. JsVar *options = jspParseSingleFunction();
  622. jswrap_spi_setup(parent, options);
  623. jsvUnLock(options);
  624. return 0;
  625. } else if (CMP2(name[2],'n','d')) {
  626. if (CMP4(name[4],'8','b','i','t') && name[8]=='\0') {
  627. // SPI.send8bit (src/jswrap_spi_i2c.c)
  628. JsVar *data, *bit0, *bit1, *nss_pin;
  629. jspParseFunction(0, &data, &bit0, &bit1, &nss_pin);
  630. jswrap_spi_send8bit(parent, data, jsvGetIntegerAndUnLock(bit0), jsvGetIntegerAndUnLock(bit1), jshGetPinFromVarAndUnLock(nss_pin));
  631. jsvUnLock(data);
  632. return 0;
  633. } else if (CMP4(name[4],'4','b','i','t') && name[8]=='\0') {
  634. // SPI.send4bit (src/jswrap_spi_i2c.c)
  635. JsVar *data, *bit0, *bit1, *nss_pin;
  636. jspParseFunction(0, &data, &bit0, &bit1, &nss_pin);
  637. jswrap_spi_send4bit(parent, data, jsvGetIntegerAndUnLock(bit0), jsvGetIntegerAndUnLock(bit1), jshGetPinFromVarAndUnLock(nss_pin));
  638. jsvUnLock(data);
  639. return 0;
  640. } else if (name[4]==0) {
  641. // SPI.send (src/jswrap_spi_i2c.c)
  642. JsVar *data, *nss_pin;
  643. jspParseFunction(0, &data, &nss_pin, 0, 0);
  644. JsVar *_r = jswrap_spi_send(parent, data, jshGetPinFromVarAndUnLock(nss_pin));
  645. jsvUnLock(data);
  646. return _r;
  647. }
  648. }
  649. }
  650. } else
  651. jsvUnLock(constructorName);
  652. }
  653. } else { /* if (!parent) */
  654. // ------------------------------------------ FUNCTIONS
  655. // Handle pin names - eg LED1 or D5 (this is hardcoded in build_jsfunctions.py)
  656. Pin pin = jshGetPinFromString(name);
  657. if (pin != PIN_UNDEFINED) {
  658. jspParseVariableName();
  659. return jsvNewFromPin(pin);
  660. }
  661. if (name[0]=='a') {
  662. if (CMP4(name[1],'r','g','u','m') && CMP4(name[5],'e','n','t','s') && name[9]=='\0') {
  663. // arguments (src/jswrap_functions.c)
  664. jspParseVariableName();
  665. JsVar *_r = jswrap_arguments();
  666. return _r;
  667. } else if (CMP4(name[1],'n','a','l','o') && name[5]=='g') {
  668. if (CMP4(name[6],'R','e','a','d') && name[10]=='\0') {
  669. // analogRead (src/jswrap_io.c)
  670. JsVar *pin = jspParseSingleFunction();
  671. JsVar *_r = jsvNewFromFloat(jshPinAnalog(jshGetPinFromVarAndUnLock(pin)));
  672. return _r;
  673. } else if (CMP4(name[6],'W','r','i','t') && CMP2(name[10],'e','\0')) {
  674. // analogWrite (src/jswrap_io.c)
  675. JsVar *pin, *value, *options;
  676. jspParseFunction(0, &pin, &value, &options, 0);
  677. jswrap_io_analogWrite(jshGetPinFromVarAndUnLock(pin), jsvGetFloatAndUnLock(value), options);
  678. jsvUnLock(options);
  679. return 0;
  680. }
  681. }
  682. } else if (CMP4(name[0],'A','r','r','a') && name[4]=='y') {
  683. if (CMP4(name[5],'B','u','f','f') && CMP3(name[9],'e','r','\0')) {
  684. // ArrayBuffer.ArrayBuffer (src/jswrap_arraybuffer.c)
  685. JsVar *byteLength = jspParseSingleFunction();
  686. JsVar *_r = jswrap_arraybuffer_constructor(jsvGetIntegerAndUnLock(byteLength));
  687. return _r;
  688. } else if (name[5]==0) {
  689. // Array.Array (src/jswrap_array.c)
  690. JsVar *args = jspParseFunctionAsArray();
  691. if (!args) return 0; // if parse error
  692. JsVar *_r = jswrap_array_constructor(args);
  693. jsvUnLock(args);
  694. return _r;
  695. }
  696. } else if (name[0]=='c') {
  697. if (CMP4(name[1],'h','a','n','g') && CMP4(name[5],'e','I','n','t') && CMP4(name[9],'e','r','v','a') && CMP2(name[13],'l','\0')) {
  698. // changeInterval (src/jswrap_io.c)
  699. JsVar *id, *time;
  700. jspParseFunction(0, &id, &time, 0, 0);
  701. jswrap_interface_changeInterval(id, jsvGetFloatAndUnLock(time));
  702. jsvUnLock(id);
  703. return 0;
  704. } else if (CMP4(name[1],'l','e','a','r')) {
  705. if (CMP4(name[5],'I','n','t','e') && CMP4(name[9],'r','v','a','l') && name[13]=='\0') {
  706. // clearInterval (src/jswrap_io.c)
  707. JsVar *id = jspParseSingleFunction();
  708. jswrap_interface_clearInterval(id);
  709. jsvUnLock(id);
  710. return 0;
  711. } else if (CMP4(name[5],'T','i','m','e') && CMP4(name[9],'o','u','t','\0')) {
  712. // clearTimeout (src/jswrap_io.c)
  713. JsVar *id = jspParseSingleFunction();
  714. jswrap_interface_clearTimeout(id);
  715. jsvUnLock(id);
  716. return 0;
  717. } else if (CMP4(name[5],'W','a','t','c') && CMP2(name[9],'h','\0')) {
  718. // clearWatch (src/jswrap_io.c)
  719. JsVar *id = jspParseSingleFunction();
  720. jswrap_interface_clearWatch(id);
  721. jsvUnLock(id);
  722. return 0;
  723. }
  724. }
  725. } else if (name[0]=='e') {
  726. if (CMP4(name[1],'c','h','o','\0')) {
  727. // echo (src/jswrap_interactive.c)
  728. JsVar *echoOn = jspParseSingleFunction();
  729. jswrap_interface_echo(jsvGetBoolAndUnLock(echoOn));
  730. return 0;
  731. } else if (CMP4(name[1],'d','i','t','\0')) {
  732. // edit (src/jswrap_interactive.c)
  733. JsVar *funcName;
  734. jspParseFunction(0|JSP_NOSKIP_A, &funcName, 0, 0, 0);
  735. jswrap_interface_edit(funcName);
  736. jsvUnLock(funcName);
  737. return 0;
  738. } else if (CMP4(name[1],'v','a','l','\0')) {
  739. // eval (src/jswrap_functions.c)
  740. JsVar *code = jspParseSingleFunction();
  741. JsVar *_r = jswrap_eval(code);
  742. jsvUnLock(code);
  743. return _r;
  744. }
  745. } else if (name[0]=='d') {
  746. if (CMP4(name[1],'i','g','i','t') && CMP2(name[5],'a','l')) {
  747. if (CMP4(name[7],'P','u','l','s') && CMP2(name[11],'e','\0')) {
  748. // digitalPulse (src/jswrap_io.c)
  749. JsVar *pin, *value, *time;
  750. jspParseFunction(0, &pin, &value, &time, 0);
  751. jswrap_io_digitalPulse(jshGetPinFromVarAndUnLock(pin), jsvGetBoolAndUnLock(value), jsvGetFloatAndUnLock(time));
  752. return 0;
  753. } else if (CMP4(name[7],'R','e','a','d') && name[11]=='\0') {
  754. // digitalRead (src/jswrap_io.c)
  755. JsVar *pin = jspParseSingleFunction();
  756. JsVar *_r = jsvNewFromInteger(jswrap_io_digitalRead(pin));
  757. jsvUnLock(pin);
  758. return _r;
  759. } else if (CMP4(name[7],'W','r','i','t') && CMP2(name[11],'e','\0')) {
  760. // digitalWrite (src/jswrap_io.c)
  761. JsVar *pin, *value;
  762. jspParseFunction(0, &pin, &value, 0, 0);
  763. jswrap_io_digitalWrite(pin, jsvGetIntegerAndUnLock(value));
  764. jsvUnLock(pin);
  765. return 0;
  766. }
  767. } else if (CMP4(name[1],'u','m','p','\0')) {
  768. // dump (src/jswrap_interactive.c)
  769. jspParseEmptyFunction();
  770. jsiDumpState();
  771. return 0;
  772. }
  773. } else if (CMP3(name[0],'g','e','t')) {
  774. if (CMP4(name[3],'S','e','r','i') && CMP3(name[7],'a','l','\0')) {
  775. // getSerial (src/jswrap_interactive.c)
  776. jspParseEmptyFunction();
  777. JsVar *_r = jswrap_interface_getSerial();
  778. return _r;
  779. } else if (CMP4(name[3],'T','i','m','e') && name[7]=='\0') {
  780. // getTime (src/jswrap_interactive.c)
  781. jspParseEmptyFunction();
  782. JsVar *_r = jsvNewFromFloat((JsVarFloat)jshGetSystemTime() / (JsVarFloat)jshGetTimeFromMilliseconds(1000));
  783. return _r;
  784. }
  785. } else if (CMP4(name[0],'F','l','o','a') && name[4]=='t') {
  786. if (CMP4(name[5],'3','2','A','r') && CMP4(name[9],'r','a','y','\0')) {
  787. // Float32Array.Float32Array (src/jswrap_arraybuffer.c)
  788. JsVar *arr, *byteOffset, *length;
  789. jspParseFunction(0, &arr, &byteOffset, &length, 0);
  790. JsVar *_r = jswrap_typedarray_constructor(ARRAYBUFFERVIEW_FLOAT32, arr, jsvGetInteger(byteOffset), jsvGetInteger(length));
  791. jsvUnLock(arr);
  792. jsvUnLock(byteOffset);
  793. jsvUnLock(length);
  794. return _r;
  795. } else if (CMP4(name[5],'6','4','A','r') && CMP4(name[9],'r','a','y','\0')) {
  796. // Float64Array.Float64Array (src/jswrap_arraybuffer.c)
  797. JsVar *arr, *byteOffset, *length;
  798. jspParseFunction(0, &arr, &byteOffset, &length, 0);
  799. JsVar *_r = jswrap_typedarray_constructor(ARRAYBUFFERVIEW_FLOAT64, arr, jsvGetInteger(byteOffset), jsvGetInteger(length));
  800. jsvUnLock(arr);
  801. jsvUnLock(byteOffset);
  802. jsvUnLock(length);
  803. return _r;
  804. }
  805. } else if (name[0]=='S') {
  806. if (CMP2(name[1],'P','I')) {
  807. if (CMP2(name[3],'1','\0')) {
  808. // Object SPI1 (src/jswrap_spi_i2c.c)
  809. #if SPIS>=1
  810. jspParseVariableName();
  811. return jspNewObject(jsiGetParser(), "SPI1", "SPI");
  812. #endif //SPIS>=1
  813. } else if (CMP2(name[3],'3','\0')) {
  814. // Object SPI3 (src/jswrap_spi_i2c.c)
  815. #if SPIS>=3
  816. jspParseVariableName();
  817. return jspNewObject(jsiGetParser(), "SPI3", "SPI");
  818. #endif //SPIS>=3
  819. } else if (CMP2(name[3],'2','\0')) {
  820. // Object SPI2 (src/jswrap_spi_i2c.c)
  821. #if SPIS>=2
  822. jspParseVariableName();
  823. return jspNewObject(jsiGetParser(), "SPI2", "SPI");
  824. #endif //SPIS>=2
  825. }
  826. } else if (CMP4(name[1],'e','r','i','a') && name[5]=='l') {
  827. if (CMP2(name[6],'1','\0')) {
  828. // Object Serial1 (src/jswrap_serial.c)
  829. #if USARTS>=1
  830. jspParseVariableName();
  831. return jspNewObject(jsiGetParser(), "Serial1", "Serial");
  832. #endif //USARTS>=1
  833. } else if (CMP2(name[6],'3','\0')) {
  834. // Object Serial3 (src/jswrap_serial.c)
  835. #if USARTS>=3
  836. jspParseVariableName();
  837. return jspNewObject(jsiGetParser(), "Serial3", "Serial");
  838. #endif //USARTS>=3
  839. } else if (CMP2(name[6],'2','\0')) {
  840. // Object Serial2 (src/jswrap_serial.c)
  841. #if USARTS>=2
  842. jspParseVariableName();
  843. return jspNewObject(jsiGetParser(), "Serial2", "Serial");
  844. #endif //USARTS>=2
  845. } else if (CMP2(name[6],'5','\0')) {
  846. // Object Serial5 (src/jswrap_serial.c)
  847. #if USARTS>=5
  848. jspParseVariableName();
  849. return jspNewObject(jsiGetParser(), "Serial5", "Serial");
  850. #endif //USARTS>=5
  851. } else if (CMP2(name[6],'4','\0')) {
  852. // Object Serial4 (src/jswrap_serial.c)
  853. #if USARTS>=4
  854. jspParseVariableName();
  855. return jspNewObject(jsiGetParser(), "Serial4", "Serial");
  856. #endif //USARTS>=4
  857. } else if (CMP2(name[6],'6','\0')) {
  858. // Object Serial6 (src/jswrap_serial.c)
  859. #if USARTS>=6
  860. jspParseVariableName();
  861. return jspNewObject(jsiGetParser(), "Serial6", "Serial");
  862. #endif //USARTS>=6
  863. }
  864. } else if (CMP4(name[1],'t','r','i','n') && CMP2(name[5],'g','\0')) {
  865. // String.String (src/jswrap_string.c)
  866. JsVar *str = jspParseSingleFunction();
  867. JsVar *_r = jswrap_string_constructor(str);
  868. jsvUnLock(str);
  869. return _r;
  870. }
  871. } else if (CMP4(name[0],'l','o','a','d') && name[4]=='\0') {
  872. // load (src/jswrap_interactive.c)
  873. jspParseEmptyFunction();
  874. jsiSetTodo(TODO_FLASH_LOAD);
  875. return 0;
  876. } else if (CMP4(name[0],'O','n','e','W') && CMP4(name[4],'i','r','e','\0')) {
  877. // OneWire.OneWire (src/jswrap_onewire.c)
  878. JsVar *pin = jspParseSingleFunction();
  879. JsVar *_r = jswrap_onewire_constructor(jshGetPinFromVarAndUnLock(pin));
  880. return _r;
  881. } else if (CMP4(name[0],'N','a','N','\0')) {
  882. // NaN (libs/jswrap_math.c)
  883. jspParseVariableName();
  884. JsVar *_r = jsvNewFromFloat(NAN);
  885. return _r;
  886. } else if (name[0]=='p') {
  887. if (CMP4(name[1],'a','r','s','e')) {
  888. if (CMP4(name[5],'I','n','t','\0')) {
  889. // parseInt (src/jswrap_functions.c)
  890. JsVar *string, *radix;
  891. jspParseFunction(0, &string, &radix, 0, 0);
  892. JsVar *_r = jswrap_parseInt(string, radix);
  893. jsvUnLock(string);
  894. jsvUnLock(radix);
  895. return _r;
  896. } else if (CMP4(name[5],'F','l','o','a') && CMP2(name[9],'t','\0')) {
  897. // parseFloat (src/jswrap_functions.c)
  898. JsVar *string = jspParseSingleFunction();
  899. JsVar *_r = jsvNewFromFloat(jswrap_parseFloat(string));
  900. jsvUnLock(string);
  901. return _r;
  902. }
  903. } else if (CMP4(name[1],'i','n','M','o') && CMP3(name[5],'d','e','\0')) {
  904. // pinMode (src/jswrap_io.c)
  905. JsVar *pin, *mode;
  906. jspParseFunction(0, &pin, &mode, 0, 0);
  907. jswrap_io_pinMode(jshGetPinFromVarAndUnLock(pin), mode);
  908. jsvUnLock(mode);
  909. return 0;
  910. } else if (CMP4(name[1],'r','i','n','t') && name[5]=='\0') {
  911. // print (src/jswrap_interactive.c)
  912. JsVar *text = jspParseFunctionAsArray();
  913. if (!text) return 0; // if parse error
  914. jswrap_interface_print(text);
  915. jsvUnLock(text);
  916. return 0;
  917. } else if (CMP3(name[1],'e','e','k')) {
  918. if (CMP3(name[4],'1','6','\0')) {
  919. // peek16 (src/jswrap_io.c)
  920. JsVar *addr = jspParseSingleFunction();
  921. JsVar *_r = jsvNewFromInteger((JsVarInt)*(unsigned short*)jsvGetInteger(addr));
  922. jsvUnLock(addr);
  923. return _r;
  924. } else if (CMP2(name[4],'8','\0')) {
  925. // peek8 (src/jswrap_io.c)
  926. JsVar *addr = jspParseSingleFunction();
  927. JsVar *_r = jsvNewFromInteger((JsVarInt)*(unsigned char*)jsvGetInteger(addr));
  928. jsvUnLock(addr);
  929. return _r;
  930. } else if (CMP3(name[4],'3','2','\0')) {
  931. // peek32 (src/jswrap_io.c)
  932. JsVar *addr = jspParseSingleFunction();
  933. JsVar *_r = jsvNewFromInteger((JsVarInt)*(unsigned int*)jsvGetInteger(addr));
  934. jsvUnLock(addr);
  935. return _r;
  936. }
  937. } else if (CMP3(name[1],'o','k','e')) {
  938. if (CMP3(name[4],'1','6','\0')) {
  939. // poke16 (src/jswrap_io.c)
  940. JsVar *addr, *value;
  941. jspParseFunction(0, &addr, &value, 0, 0);
  942. (*(unsigned short*)jsvGetInteger(addr)) = (unsigned short)jsvGetInteger(value);
  943. jsvUnLock(addr);
  944. jsvUnLock(value);
  945. return 0;
  946. } else if (CMP2(name[4],'8','\0')) {
  947. // poke8 (src/jswrap_io.c)
  948. JsVar *addr, *value;
  949. jspParseFunction(0, &addr, &value, 0, 0);
  950. (*(unsigned char*)jsvGetInteger(addr)) = (unsigned char)jsvGetInteger(value);
  951. jsvUnLock(addr);
  952. jsvUnLock(value);
  953. return 0;
  954. } else if (CMP3(name[4],'3','2','\0')) {
  955. // poke32 (src/jswrap_io.c)
  956. JsVar *addr, *value;
  957. jspParseFunction(0, &addr, &value, 0, 0);
  958. (*(unsigned int*)jsvGetInteger(addr)) = (unsigned int)jsvGetInteger(value);
  959. jsvUnLock(addr);
  960. jsvUnLock(value);
  961. return 0;
  962. }
  963. }
  964. } else if (name[0]=='s') {
  965. if (CMP4(name[1],'a','v','e','\0')) {
  966. // save (src/jswrap_interactive.c)
  967. jspParseEmptyFunction();
  968. jsiSetTodo(TODO_FLASH_SAVE);
  969. return 0;
  970. } else if (CMP2(name[1],'e','t')) {
  971. if (CMP4(name[3],'B','u','s','y') && CMP4(name[7],'I','n','d','i') && CMP4(name[11],'c','a','t','o') && CMP2(name[15],'r','\0')) {
  972. // setBusyIndicator (src/jswrap_interactive.c)
  973. JsVar *pin = jspParseSingleFunction();
  974. jswrap_interface_setBusyIndicator(pin);
  975. jsvUnLock(pin);
  976. return 0;
  977. } else if (CMP4(name[3],'D','e','e','p') && CMP4(name[7],'S','l','e','e') && CMP2(name[11],'p','\0')) {
  978. // setDeepSleep (src/jswrap_interactive.c)
  979. JsVar *sleep = jspParseSingleFunction();
  980. jswrap_interface_setDeepSleep(jsvGetBoolAndUnLock(sleep));
  981. return 0;
  982. } else if (CMP4(name[3],'I','n','t','e') && CMP4(name[7],'r','v','a','l') && name[11]=='\0') {
  983. // setInterval (src/jswrap_io.c)
  984. JsVar *function, *timeout;
  985. jspParseFunction(0|JSP_NOSKIP_A, &function, &timeout, 0, 0);
  986. JsVar *_r = jswrap_interface_setInterval(function, jsvGetFloatAndUnLock(timeout));
  987. jsvUnLock(function);
  988. return _r;
  989. } else if (CMP4(name[3],'S','l','e','e') && CMP4(name[7],'p','I','n','d') && CMP4(name[11],'i','c','a','t') && CMP3(name[15],'o','r','\0')) {
  990. // setSleepIndicator (src/jswrap_interactive.c)
  991. JsVar *pin = jspParseSingleFunction();
  992. jswrap_interface_setSleepIndicator(pin);
  993. jsvUnLock(pin);
  994. return 0;
  995. } else if (CMP4(name[3],'T','i','m','e') && CMP4(name[7],'o','u','t','\0')) {
  996. // setTimeout (src/jswrap_io.c)
  997. JsVar *function, *timeout;
  998. jspParseFunction(0|JSP_NOSKIP_A, &function, &timeout, 0, 0);
  999. JsVar *_r = jswrap_interface_setTimeout(function, jsvGetFloatAndUnLock(timeout));
  1000. jsvUnLock(function);
  1001. return _r;
  1002. } else if (CMP4(name[3],'W','a','t','c') && CMP2(name[7],'h','\0')) {
  1003. // setWatch (src/jswrap_io.c)
  1004. JsVar *function, *pin, *options;
  1005. jspParseFunction(0|JSP_NOSKIP_A, &function, &pin, &options, 0);
  1006. JsVar *_r = jswrap_interface_setWatch(function, jshGetPinFromVarAndUnLock(pin), options);
  1007. jsvUnLock(function);
  1008. jsvUnLock(options);
  1009. return _r;
  1010. }
  1011. }
  1012. } else if (CMP2(name[0],'r','e')) {
  1013. if (CMP4(name[2],'q','u','i','r') && CMP2(name[6],'e','\0')) {
  1014. // require (src/jswrap_modules.c)
  1015. JsVar *moduleName = jspParseSingleFunction();
  1016. JsVar *_r = jswrap_require(moduleName);
  1017. jsvUnLock(moduleName);
  1018. return _r;
  1019. } else if (CMP4(name[2],'s','e','t','\0')) {
  1020. // reset (src/jswrap_interactive.c)
  1021. jspParseEmptyFunction();
  1022. jsiSetTodo(TODO_RESET);
  1023. return 0;
  1024. }
  1025. } else if (name[0]=='U') {
  1026. if (CMP3(name[1],'i','n','t')) {
  1027. if (CMP4(name[4],'1','6','A','r') && CMP4(name[8],'r','a','y','\0')) {
  1028. // Uint16Array.Uint16Array (src/jswrap_arraybuffer.c)
  1029. JsVar *arr, *byteOffset, *length;
  1030. jspParseFunction(0, &arr, &byteOffset, &length, 0);
  1031. JsVar *_r = jswrap_typedarray_constructor(ARRAYBUFFERVIEW_UINT16, arr, jsvGetInteger(byteOffset), jsvGetInteger(length));
  1032. jsvUnLock(arr);
  1033. jsvUnLock(byteOffset);
  1034. jsvUnLock(length);
  1035. return _r;
  1036. } else if (CMP4(name[4],'8','A','r','r') && CMP3(name[8],'a','y','\0')) {
  1037. // Uint8Array.Uint8Array (src/jswrap_arraybuffer.c)
  1038. JsVar *arr, *byteOffset, *length;
  1039. jspParseFunction(0, &arr, &byteOffset, &length, 0);
  1040. JsVar *_r = jswrap_typedarray_constructor(ARRAYBUFFERVIEW_UINT8, arr, jsvGetInteger(byteOffset), jsvGetInteger(length));
  1041. jsvUnLock(arr);
  1042. jsvUnLock(byteOffset);
  1043. jsvUnLock(length);
  1044. return _r;
  1045. } else if (CMP4(name[4],'3','2','A','r') && CMP4(name[8],'r','a','y','\0')) {
  1046. // Uint32Array.Uint32Array (src/jswrap_arraybuffer.c)
  1047. JsVar *arr, *byteOffset, *length;
  1048. jspParseFunction(0, &arr, &byteOffset, &length, 0);
  1049. JsVar *_r = jswrap_typedarray_constructor(ARRAYBUFFERVIEW_UINT32, arr, jsvGetInteger(byteOffset), jsvGetInteger(length));
  1050. jsvUnLock(arr);
  1051. jsvUnLock(byteOffset);
  1052. jsvUnLock(length);
  1053. return _r;
  1054. }
  1055. } else if (CMP3(name[1],'S','B','\0')) {
  1056. // Object USB (src/jswrap_serial.c)
  1057. #if defined(USB)
  1058. jspParseVariableName();
  1059. return jspNewObject(jsiGetParser(), "USB", "Serial");
  1060. #endif //defined(USB)
  1061. }
  1062. } else if (CMP4(name[0],'t','r','a','c') && CMP2(name[4],'e','\0')) {
  1063. // trace (src/jswrap_interactive.c)
  1064. JsVar *root;
  1065. jspParseFunction(0|JSP_NOSKIP_A, &root, 0, 0, 0);
  1066. jswrap_interface_trace(root);
  1067. jsvUnLock(root);
  1068. return 0;
  1069. } else if (name[0]=='I') {
  1070. if (CMP2(name[1],'2','C')) {
  1071. if (CMP2(name[3],'1','\0')) {
  1072. // Object I2C1 (src/jswrap_spi_i2c.c)
  1073. #if I2CS>=1
  1074. jspParseVariableName();
  1075. return jspNewObject(jsiGetParser(), "I2C1", "I2C");
  1076. #endif //I2CS>=1
  1077. } else if (CMP2(name[3],'3','\0')) {
  1078. // Object I2C3 (src/jswrap_spi_i2c.c)
  1079. #if I2CS>=3
  1080. jspParseVariableName();
  1081. return jspNewObject(jsiGetParser(), "I2C3", "I2C");
  1082. #endif //I2CS>=3
  1083. } else if (CMP2(name[3],'2','\0')) {
  1084. // Object I2C2 (src/jswrap_spi_i2c.c)
  1085. #if I2CS>=2
  1086. jspParseVariableName();
  1087. return jspNewObject(jsiGetParser(), "I2C2", "I2C");
  1088. #endif //I2CS>=2
  1089. }
  1090. } else if (CMP2(name[1],'n','t')) {
  1091. if (CMP4(name[3],'1','6','A','r') && CMP4(name[7],'r','a','y','\0')) {
  1092. // Int16Array.Int16Array (src/jswrap_arraybuffer.c)
  1093. JsVar *arr, *byteOffset, *length;
  1094. jspParseFunction(0, &arr, &byteOffset, &length, 0);
  1095. JsVar *_r = jswrap_typedarray_constructor(ARRAYBUFFERVIEW_INT16, arr, jsvGetInteger(byteOffset), jsvGetInteger(length));
  1096. jsvUnLock(arr);
  1097. jsvUnLock(byteOffset);
  1098. jsvUnLock(length);
  1099. return _r;
  1100. } else if (CMP4(name[3],'8','A','r','r') && CMP3(name[7],'a','y','\0')) {
  1101. // Int8Array.Int8Array (src/jswrap_arraybuffer.c)
  1102. JsVar *arr, *byteOffset, *length;
  1103. jspParseFunction(0, &arr, &byteOffset, &length, 0);
  1104. JsVar *_r = jswrap_typedarray_constructor(ARRAYBUFFERVIEW_INT8, arr, jsvGetInteger(byteOffset), jsvGetInteger(length));
  1105. jsvUnLock(arr);
  1106. jsvUnLock(byteOffset);
  1107. jsvUnLock(length);
  1108. return _r;
  1109. } else if (CMP4(name[3],'3','2','A','r') && CMP4(name[7],'r','a','y','\0')) {
  1110. // Int32Array.Int32Array (src/jswrap_arraybuffer.c)
  1111. JsVar *arr, *byteOffset, *length;
  1112. jspParseFunction(0, &arr, &byteOffset, &length, 0);
  1113. JsVar *_r = jswrap_typedarray_constructor(ARRAYBUFFERVIEW_INT32, arr, jsvGetInteger(byteOffset), jsvGetInteger(length));
  1114. jsvUnLock(arr);
  1115. jsvUnLock(byteOffset);
  1116. jsvUnLock(length);
  1117. return _r;
  1118. }
  1119. }
  1120. }
  1121. }
  1122. return JSW_HANDLEFUNCTIONCALL_UNHANDLED;
  1123. }
  1124. bool jswIsBuiltInObject(const char *name) {
  1125. return
  1126. strcmp(name, "Pin")==0 ||
  1127. strcmp(name, "Modules")==0 ||
  1128. strcmp(name, "process")==0 ||
  1129. strcmp(name, "console")==0 ||
  1130. strcmp(name, "JSON")==0 ||
  1131. strcmp(name, "Hardware")==0 ||
  1132. strcmp(name, "Object")==0 ||
  1133. strcmp(name, "Function")==0 ||
  1134. strcmp(name, "Integer")==0 ||
  1135. strcmp(name, "Double")==0 ||
  1136. strcmp(name, "String")==0 ||
  1137. strcmp(name, "Array")==0 ||
  1138. strcmp(name, "ArrayBuffer")==0 ||
  1139. strcmp(name, "ArrayBufferView")==0 ||
  1140. strcmp(name, "Uint8Array")==0 ||
  1141. strcmp(name, "Int8Array")==0 ||
  1142. strcmp(name, "Uint16Array")==0 ||
  1143. strcmp(name, "Int16Array")==0 ||
  1144. strcmp(name, "Uint32Array")==0 ||
  1145. strcmp(name, "Int32Array")==0 ||
  1146. strcmp(name, "Float32Array")==0 ||
  1147. strcmp(name, "Float64Array")==0 ||
  1148. strcmp(name, "Serial")==0 ||
  1149. strcmp(name, "SPI")==0 ||
  1150. strcmp(name, "I2C")==0 ||
  1151. strcmp(name, "OneWire")==0 ||
  1152. strcmp(name, "Math")==0;
  1153. }
  1154. bool jswIsBuiltInLibrary(const char *name) {
  1155. return
  1156. ;
  1157. }
  1158. /** Given a variable, return the basic object name of it */
  1159. const char *jswGetBasicObjectName(JsVar *var) {
  1160. if (jsvIsFunction(var)) return "Function";
  1161. if (jsvIsArrayBuffer(var) && var->varData.arraybuffer.type==ARRAYBUFFERVIEW_INT32) return "Int32Array";
  1162. if (jsvIsString(var)) return "String";
  1163. if (jsvIsPin(var)) return "Pin";
  1164. if (jsvIsFloat(var)) return "Double";
  1165. if (jsvIsArrayBuffer(var) && var->varData.arraybuffer.type==ARRAYBUFFERVIEW_ARRAYBUFFER) return "ArrayBuffer";
  1166. if (jsvIsObject(var)) return "Object";
  1167. if (jsvIsArrayBuffer(var) && var->varData.arraybuffer.type==ARRAYBUFFERVIEW_UINT8) return "Uint8Array";
  1168. if (jsvIsArrayBuffer(var) && var->varData.arraybuffer.type==ARRAYBUFFERVIEW_UINT16) return "Uint16Array";
  1169. if (jsvIsRoot(var)) return "Hardware";
  1170. if (jsvIsArrayBuffer(var) && var->varData.arraybuffer.type==ARRAYBUFFERVIEW_FLOAT64) return "Float64Array";
  1171. if (jsvIsArrayBuffer(var) && var->varData.arraybuffer.type==ARRAYBUFFERVIEW_INT8) return "Int8Array";
  1172. if (jsvIsInt(var)) return "Integer";
  1173. if (jsvIsArray(var)) return "Array";
  1174. if (jsvIsArrayBuffer(var) && var->varData.arraybuffer.type==ARRAYBUFFERVIEW_INT16) return "Int16Array";
  1175. if (jsvIsArrayBuffer(var) && var->varData.arraybuffer.type==ARRAYBUFFERVIEW_FLOAT32) return "Float32Array";
  1176. if (jsvIsArrayBuffer(var) && var->varData.arraybuffer.type==ARRAYBUFFERVIEW_UINT32) return "Uint32Array";
  1177. return 0;
  1178. }
  1179. /** Given the name of a Basic Object, eg, Uint8Array, String, etc. Return the prototype object's name - or 0. */
  1180. const char *jswGetBasicObjectPrototypeName(const char *objectName) {
  1181. if (!strcmp(objectName, "Uint8Array")) return "ArrayBufferView";
  1182. if (!strcmp(objectName, "Int8Array")) return "ArrayBufferView";
  1183. if (!strcmp(objectName, "Uint16Array")) return "ArrayBufferView";
  1184. if (!strcmp(objectName, "Int16Array")) return "ArrayBufferView";
  1185. if (!strcmp(objectName, "Uint32Array")) return "ArrayBufferView";
  1186. if (!strcmp(objectName, "Int32Array")) return "ArrayBufferView";
  1187. if (!strcmp(objectName, "Float32Array")) return "ArrayBufferView";
  1188. if (!strcmp(objectName, "Float64Array")) return "ArrayBufferView";
  1189. return strcmp(objectName,"Object") ? "Object" : 0;
  1190. }