comparison cbackend.js @ 282:361a449a7235

Add some extra parens in addr_of translation and fix cleaning of names in llMessage parameters
author Michael Pavone <pavone@retrodev.com>
date Mon, 21 Jul 2014 20:24:50 -0700
parents 0dc7322590da
children bb1539decd62
comparison
equal deleted inserted replaced
281:f6dfb85e80e5 282:361a449a7235
389 case 'if:else': 389 case 'if:else':
390 return '((' + args[0].toCLLExpr(vars) + ') ? (' + args[1].toCLLExpr(vars) + ') : (' + args[2].toCLLExpr(vars) + '))'; 390 return '((' + args[0].toCLLExpr(vars) + ') ? (' + args[1].toCLLExpr(vars) + ') : (' + args[2].toCLLExpr(vars) + '))';
391 case 'while:do': 391 case 'while:do':
392 throw new Error('while:do not allowed in expression context in llMessage block'); 392 throw new Error('while:do not allowed in expression context in llMessage block');
393 case 'addr_of': 393 case 'addr_of':
394 return '&(' + args[0].toCLLExpr(vars) + ')'; 394 return '(&(' + args[0].toCLLExpr(vars) + '))';
395 case 'sizeof': 395 case 'sizeof':
396 return 'sizeof(' + args[0].toCTypeName() + ')'; 396 return 'sizeof(' + args[0].toCTypeName() + ')';
397 case 'get': 397 case 'get':
398 return args[0].toCLLExpr(vars) + '[' + args[1].toCLLExpr(vars) + ']'; 398 return args[0].toCLLExpr(vars) + '[' + args[1].toCLLExpr(vars) + ']';
399 case 'set': 399 case 'set':
805 805
806 return intObj; 806 return intObj;
807 } 807 }
808 808
809 function makeCPointer() 809 function makeCPointer()
810 { 810 {
811 var cptr = new cObject('cpointer'); 811 var cptr = new cObject('cpointer');
812 cptr.addProperty('val', null, 'void *'); 812 cptr.addProperty('val', null, 'void *');
813 //cpointer: 813 //cpointer:
814 //1234567890 814 //1234567890
815 cptr.addMessage('string', { 815 cptr.addMessage('string', {
816 vars: {ret: 'string *'}, 816 vars: {ret: 'string *'},
817 lines: [ 817 lines: [
818 'ret = make_object(&string_meta, NULL, 0);', 818 'ret = make_object(&string_meta, NULL, 0);',
1218 for (var i in this.args) { 1218 for (var i in this.args) {
1219 var name = this.args[i].name; 1219 var name = this.args[i].name;
1220 if (name[0] == ':') { 1220 if (name[0] == ':') {
1221 name = name.substr(1); 1221 name = name.substr(1);
1222 } 1222 }
1223 if (name[0] >= "0" && name[0] <= "9") {
1224 name = '_tp_' + name;
1225 }
1223 if(name != 'self') { 1226 if(name != 'self') {
1224 lines.push(name + ' = va_arg(args, ' + vars[name] + ');'); 1227 lines.push(name + ' = va_arg(args, ' + vars[name] + ');');
1225 } 1228 }
1226 } 1229 }
1227 for (var i in this.expressions) { 1230 for (var i in this.expressions) {