JS: don't use wrapper messages for string, int and double literals. This allowed to decrease binary AST size of stdlib from 2659138 bytes to 2642908 bytes

This commit is contained in:
Alexey Andreev
2017-03-20 12:04:30 +03:00
parent f4a9b99e4d
commit dd43d0a9e0
5 changed files with 481 additions and 3373 deletions
File diff suppressed because it is too large Load Diff
+3 -15
View File
@@ -47,10 +47,10 @@ message Expression {
NullLiteral null_literal = 24;
TrueLiteral true_literal = 25;
FalseLiteral false_literal = 26;
StringLiteral string_literal = 27;
int32 string_literal = 27;
RegExpLiteral reg_exp_literal = 28;
IntLiteral int_literal = 29;
DoubleLiteral double_literal = 30;
int32 int_literal = 29;
double double_literal = 30;
ArrayLiteral array_literal = 31;
ObjectLiteral object_literal = 32;
Function function = 33;
@@ -78,23 +78,11 @@ message TrueLiteral {
message FalseLiteral {
}
message StringLiteral {
required int32 string_id = 1;
}
message RegExpLiteral {
required int32 pattern_string_id = 1;
optional int32 flags_string_id = 2;
}
message IntLiteral {
required int32 value = 1;
}
message DoubleLiteral {
required double value = 1;
}
message ArrayLiteral {
repeated Expression element = 1;
}
@@ -263,9 +263,9 @@ class JsAstDeserializer(private val program: JsProgram) {
ExpressionCase.NULL_LITERAL -> JsLiteral.NULL
ExpressionCase.TRUE_LITERAL -> JsLiteral.TRUE
ExpressionCase.FALSE_LITERAL -> JsLiteral.FALSE
ExpressionCase.STRING_LITERAL -> program.getStringLiteral(deserializeString(proto.stringLiteral.stringId))
ExpressionCase.INT_LITERAL -> program.getNumberLiteral(proto.intLiteral.value)
ExpressionCase.DOUBLE_LITERAL -> program.getNumberLiteral(proto.doubleLiteral.value)
ExpressionCase.STRING_LITERAL -> program.getStringLiteral(deserializeString(proto.stringLiteral))
ExpressionCase.INT_LITERAL -> program.getNumberLiteral(proto.intLiteral)
ExpressionCase.DOUBLE_LITERAL -> program.getNumberLiteral(proto.doubleLiteral)
ExpressionCase.SIMPLE_NAME_REFERENCE -> JsNameRef(deserializeName(proto.simpleNameReference))
ExpressionCase.REG_EXP_LITERAL -> {
File diff suppressed because it is too large Load Diff
@@ -284,9 +284,7 @@ class JsAstSerializer {
}
override fun visitString(x: JsStringLiteral) {
val stringBuilder = StringLiteral.newBuilder()
stringBuilder.stringId = serialize(x.value)
builder.stringLiteral = stringBuilder.build()
builder.stringLiteral = serialize(x.value)
}
override fun visitRegExp(x: JsRegExp) {
@@ -297,15 +295,11 @@ class JsAstSerializer {
}
override fun visitInt(x: JsNumberLiteral.JsIntLiteral) {
val intBuilder = IntLiteral.newBuilder()
intBuilder.value = x.value
builder.intLiteral = intBuilder.build()
builder.intLiteral = x.value
}
override fun visitDouble(x: JsNumberLiteral.JsDoubleLiteral) {
val doubleBuilder = DoubleLiteral.newBuilder()
doubleBuilder.value = x.value
builder.doubleLiteral = doubleBuilder.build()
builder.doubleLiteral = x.value
}
override fun visitArray(x: JsArrayLiteral) {