pluotsorbet/classfile/signature.js

74 строки
1.8 KiB
JavaScript
Исходник Обычный вид История

2014-07-06 12:29:36 +04:00
/* -*- Mode: Java; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
/* vim: set shiftwidth=4 tabstop=4 autoindent cindent expandtab: */
'use strict';
var TYPE = {
boolean: 'Z',
byte: 'B',
char: 'C',
2014-07-12 20:48:24 +04:00
double: 'D',
float: 'F',
int: 'I',
long: 'J',
object: 'L',
short: 'S',
void: 'V',
2014-07-06 12:29:36 +04:00
array: '[',
toString: function(s) {
for(var type in this) {
if (this[type] === s) {
return type;
}
}
return null;
}
};
var _parse = function(part) {
var res = [];
if (part != '') {
var isArray = false;
var pos = 0;
while (pos < part.length) {
switch(part[pos]) {
case TYPE.boolean:
case TYPE.byte:
case TYPE.char:
case TYPE.double:
case TYPE.float:
case TYPE.int:
2014-07-12 20:48:24 +04:00
case TYPE.long:
2014-07-06 12:29:36 +04:00
case TYPE.short:
res.push( { type: TYPE.toString(part[pos]), isArray: isArray } );
isArray = false;
break;
case TYPE.object:
var className = '';
while (part[++pos] !== ';') {
className += part[pos];
}
res.push( { type: "object", isArray: isArray, className: className } );
isArray = false;
2014-07-12 20:48:24 +04:00
break;
2014-07-06 12:29:36 +04:00
case TYPE.array:
isArray = true;
break;
}
pos++;
}
}
return res;
}
var parse = function(s) {
var IN = s.split(')')[0].substr(1);
var OUT = s.split(')')[1];
2014-07-12 20:48:24 +04:00
2014-07-06 12:29:36 +04:00
return {
IN: _parse(IN),
2014-07-14 02:27:25 +04:00
OUT: _parse(OUT)
2014-07-06 12:29:36 +04:00
};
};