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; NullLiteral null_literal = 24;
TrueLiteral true_literal = 25; TrueLiteral true_literal = 25;
FalseLiteral false_literal = 26; FalseLiteral false_literal = 26;
StringLiteral string_literal = 27; int32 string_literal = 27;
RegExpLiteral reg_exp_literal = 28; RegExpLiteral reg_exp_literal = 28;
IntLiteral int_literal = 29; int32 int_literal = 29;
DoubleLiteral double_literal = 30; double double_literal = 30;
ArrayLiteral array_literal = 31; ArrayLiteral array_literal = 31;
ObjectLiteral object_literal = 32; ObjectLiteral object_literal = 32;
Function function = 33; Function function = 33;
@@ -78,23 +78,11 @@ message TrueLiteral {
message FalseLiteral { message FalseLiteral {
} }
message StringLiteral {
required int32 string_id = 1;
}
message RegExpLiteral { message RegExpLiteral {
required int32 pattern_string_id = 1; required int32 pattern_string_id = 1;
optional int32 flags_string_id = 2; optional int32 flags_string_id = 2;
} }
message IntLiteral {
required int32 value = 1;
}
message DoubleLiteral {
required double value = 1;
}
message ArrayLiteral { message ArrayLiteral {
repeated Expression element = 1; repeated Expression element = 1;
} }
@@ -263,9 +263,9 @@ class JsAstDeserializer(private val program: JsProgram) {
ExpressionCase.NULL_LITERAL -> JsLiteral.NULL ExpressionCase.NULL_LITERAL -> JsLiteral.NULL
ExpressionCase.TRUE_LITERAL -> JsLiteral.TRUE ExpressionCase.TRUE_LITERAL -> JsLiteral.TRUE
ExpressionCase.FALSE_LITERAL -> JsLiteral.FALSE ExpressionCase.FALSE_LITERAL -> JsLiteral.FALSE
ExpressionCase.STRING_LITERAL -> program.getStringLiteral(deserializeString(proto.stringLiteral.stringId)) ExpressionCase.STRING_LITERAL -> program.getStringLiteral(deserializeString(proto.stringLiteral))
ExpressionCase.INT_LITERAL -> program.getNumberLiteral(proto.intLiteral.value) ExpressionCase.INT_LITERAL -> program.getNumberLiteral(proto.intLiteral)
ExpressionCase.DOUBLE_LITERAL -> program.getNumberLiteral(proto.doubleLiteral.value) ExpressionCase.DOUBLE_LITERAL -> program.getNumberLiteral(proto.doubleLiteral)
ExpressionCase.SIMPLE_NAME_REFERENCE -> JsNameRef(deserializeName(proto.simpleNameReference)) ExpressionCase.SIMPLE_NAME_REFERENCE -> JsNameRef(deserializeName(proto.simpleNameReference))
ExpressionCase.REG_EXP_LITERAL -> { 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) { override fun visitString(x: JsStringLiteral) {
val stringBuilder = StringLiteral.newBuilder() builder.stringLiteral = serialize(x.value)
stringBuilder.stringId = serialize(x.value)
builder.stringLiteral = stringBuilder.build()
} }
override fun visitRegExp(x: JsRegExp) { override fun visitRegExp(x: JsRegExp) {
@@ -297,15 +295,11 @@ class JsAstSerializer {
} }
override fun visitInt(x: JsNumberLiteral.JsIntLiteral) { override fun visitInt(x: JsNumberLiteral.JsIntLiteral) {
val intBuilder = IntLiteral.newBuilder() builder.intLiteral = x.value
intBuilder.value = x.value
builder.intLiteral = intBuilder.build()
} }
override fun visitDouble(x: JsNumberLiteral.JsDoubleLiteral) { override fun visitDouble(x: JsNumberLiteral.JsDoubleLiteral) {
val doubleBuilder = DoubleLiteral.newBuilder() builder.doubleLiteral = x.value
doubleBuilder.value = x.value
builder.doubleLiteral = doubleBuilder.build()
} }
override fun visitArray(x: JsArrayLiteral) { override fun visitArray(x: JsArrayLiteral) {