Age | Commit message (Collapse) | Author | |
---|---|---|---|
2015-07-10 | use github.com/golang/glog | Fumitoshi Ukai | |
2015-07-09 | use sync.Pool for evalBuffer and wordBuffer | Fumitoshi Ukai | |
2015-07-08 | fix unmatched_paren2.mk | Fumitoshi Ukai | |
2015-07-07 | fix equal_in_target.mk | Fumitoshi Ukai | |
2015-07-07 | fix err_unterminated_var.mk | Fumitoshi Ukai | |
2015-07-07 | fix err_unterminated_func.mk | Fumitoshi Ukai | |
2015-07-07 | introduce evalWriter | Fumitoshi Ukai | |
merge ssvWriter into buffer | |||
2015-07-07 | refactor parser | Fumitoshi Ukai | |
fix backslash_in_rule_command.mk | |||
2015-07-03 | fix unmatched_paren.mk | Fumitoshi Ukai | |
2015-06-30 | fix TODO in value.mk | Fumitoshi Ukai | |
2015-06-26 | fix panic based error reporting | Fumitoshi Ukai | |
2015-06-25 | unexport Func and Expr | Fumitoshi Ukai | |
2015-06-25 | unexport serialize/deserialize | Fumitoshi Ukai | |
2015-06-25 | fix TestPara | Fumitoshi Ukai | |
unexport ValueType* | |||
2015-06-25 | go gettable for github.com/google/kati | Fumitoshi Ukai | |
2015-06-24 | add -shell-date flag to specify time for $(shell date) | Fumitoshi Ukai | |
--shell-date=ref uses go reference time. useful to check parsed data with golden data. | |||
2015-06-19 | add param.mk | Fumitoshi Ukai | |
no need to assign/restore call parameter | |||
2015-06-18 | remove convT2I from appendStr | Fumitoshi Ukai | |
2015-06-18 | reduce runtime.convT2I -> runtime.newobject -> runtime.mallocgc | Fumitoshi Ukai | |
conversion from value to interface is more expensive than conversion from pointer to interface. package main import "testing" type I interface { String() string } type val struct { s string } func (v val) String() string { return v.s } type ptr struct { s string } func (p *ptr) String() string { return p.s } func BenchmarkT2IForValue(b *testing.B) { var intf I for i := 0; i < b.N; i++ { intf = val{"abc"} } _ = intf } func BenchmarkT2IForPtr(b *testing.B) { var intf I for i := 0; i < b.N; i++ { intf = &ptr{"abc"} } _ = intf } % go test -bench . a_test.go testing: warning: no tests to run PASS BenchmarkT2IForValue 20000000 90.9 ns/op BenchmarkT2IForPtr 20000000 76.8 ns/op ok command-line-arguments 3.539s | |||
2015-06-18 | parseExpr less allocation | Fumitoshi Ukai | |
2015-06-15 | add findleaves support | Fumitoshi Ukai | |
2015-06-15 | trace event: also emit findcache init event | Fumitoshi Ukai | |
2015-06-11 | refactor sh builtins | Fumitoshi Ukai | |
add -use_shell_builtins flag to disable the feature (when some builtin is broken) | |||
2015-06-11 | add -kati_trace_event=<json filename> | Fumitoshi Ukai | |
if this option is given, it outputs trace json file for chrome://tracing for makefile include traces. | |||
2015-06-10 | Add LICENSE and licence headers | Shinichiro Hamaji | |
2015-06-08 | fix -kati_eval_stats to dump stats for func call | Fumitoshi Ukai | |
2015-06-08 | fix go lint (except comment on exported fields, error message with punct) | Fumitoshi Ukai | |
ast.go:70:1: comment on exported type MaybeRuleAST should be of the form "MaybeRuleAST ..." (with optional leading article) eval.go:241:1: comment on exported method Evaluator.EvaluateVar should be of the form "EvaluateVar ..." eval.go:14:2: don't use ALL_CAPS in Go names; use CamelCase eval.go:15:2: don't use ALL_CAPS in Go names; use CamelCase eval.go:16:2: don't use ALL_CAPS in Go names; use CamelCase eval.go:431:2: don't use underscores in Go names; var makefile_list should be makefileList main.go:29:2: var loadJson should be loadJSON main.go:30:2: var saveJson should be saveJSON ninja.go:19:2: struct field ruleId should be ruleID para.go:15:9: if block ends with a return statement, so drop this else and outdent its block para_test.go:21:2: don't use underscores in Go names; var num_tasks should be numTasks parser.go:713:1: error should be the last type when returning multiple items serialize.go:20:2: don't use ALL_CAPS in Go names; use CamelCase serialize.go:21:2: don't use ALL_CAPS in Go names; use CamelCase serialize.go:22:2: don't use ALL_CAPS in Go names; use CamelCase serialize.go:23:2: don't use ALL_CAPS in Go names; use CamelCase serialize.go:24:2: don't use ALL_CAPS in Go names; use CamelCase serialize.go:25:2: don't use ALL_CAPS in Go names; use CamelCase serialize.go:26:2: don't use ALL_CAPS in Go names; use CamelCase serialize.go:27:2: don't use ALL_CAPS in Go names; use CamelCase serialize.go:28:2: don't use ALL_CAPS in Go names; use CamelCase serialize.go:29:2: don't use ALL_CAPS in Go names; use CamelCase serialize.go:30:2: don't use ALL_CAPS in Go names; use CamelCase serialize.go:31:2: don't use ALL_CAPS in Go names; use CamelCase serialize.go:32:2: don't use ALL_CAPS in Go names; use CamelCase serialize.go:230:6: func DumpDepGraphAsJson should be DumpDepGraphAsJSON serialize.go:553:6: func LoadDepGraphFromJson should be LoadDepGraphFromJSON serialize.go:437:9: if block ends with a return statement, so drop this else and outdent its block var.go:174:1: receiver name should not be an underscore var.go:175:1: receiver name should not be an underscore var.go:176:1: receiver name should not be an underscore var.go:177:1: receiver name should not be an underscore var.go:178:1: receiver name should not be an underscore var.go:180:1: receiver name should not be an underscore var.go:183:1: receiver name should not be an underscore var.go:187:1: receiver name should not be an underscore var.go:191:1: receiver name should not be an underscore | |||
2015-05-15 | Do not use gob to create unqiue ID for each vars | Shinichiro Hamaji | |
Now serialization is 5 times faster (41 secs => 8 secs). | |||
2015-05-08 | define buffer to hold args in addition to bytes.Buffer | Fumitoshi Ukai | |
2015-05-08 | don't reuse too large buffer | Fumitoshi Ukai | |
too large buffer may cause pressure on memory/gc, so reuse buffer that cap < 1024 (as fmt pacakge does) | |||
2015-05-07 | use sync.Pool for temporal bytes.Buffer. | Fumitoshi Ukai | |
remove ev.Value and ev.Values before: scanblock: 8.22s (14.83%) runtime.MScan_Sweep 4.99s(9.00%) after: scanblock: 7.42s (12.95%) runtime.MScan_Sweep 4.57s(7.98%) | |||
2015-04-28 | Re-format code | Shinichiro Hamaji | |
2015-04-28 | Make it possible to serialize vars | Shinichiro Hamaji | |
2015-04-19 | minor performance tuning | Fumitoshi Ukai | |
use []byte instead of bytes.Buffer to reduce heap allocation. | |||
2015-04-19 | add paramref for fast path for param access (e.g. $1, $(1)) | Fumitoshi Ukai | |
still set "1" in Vars, for access like n := 1 v := $($(n)) fix to set $0 to variable name in $(call ) after: % ./run_integration_test.rb android Running make for android... 5.62 secs Running kati for android... 10.89 secs android: OK PASS! | |||
2015-04-18 | minor performance tuning | Fumitoshi Ukai | |
don't call unnecessary bytes.IndexByte before: ukai@ubune.tok ~/src/kati% ./run_integration_test.rb android Running make for android... 5.78 secs Running kati for android... 13.44 secs android: OK PASS! after: % ./run_integration_test.rb android Running make for android... 5.75 secs Running kati for android... 10.97 secs android: OK PASS! | |||
2015-04-18 | use io.WriteString instead of fmt.Fprint | Fumitoshi Ukai | |
remove unnecessary []byte string conversion in funcShell. | |||
2015-04-18 | minor performance tuning | Fumitoshi Ukai | |
before: % ./run_integration_test.rb android Running make for android... 5.76 secs Running kati for android... 17.29 secs android: OK PASS! after: % ./run_integration_test.rb android Running make for android... 5.83 secs Running kati for android... 14.55 secs android: OK PASS! | |||
2015-04-16 | Compactor returns Value, not Func | Fumitoshi Ukai | |
2015-04-16 | introduce func compactor. | Fumitoshi Ukai | |
$(eval ## comment) will be nop when parsed. | |||
2015-04-16 | remove trimSpace and inFunc from parseExpr. | Fumitoshi Ukai | |
handled these in parseFunc. | |||
2015-04-16 | change f.closure.args[0] has "(funcname", or "{funcname". | Fumitoshi Ukai | |
remove f.closure.expr fclosure.String would not be called so often now (except debug logging?), and keeping expr would require lots of memory. | |||
2015-04-15 | dump stats for eval time. | Fumitoshi Ukai | |
for android dump-products $ cd repo/android $ ../../kati -kati_stats dump-products .. build/core/product_config.mk:235: *** done. func:$(foreach _in,$(2), $(if $(wildcard $(_in)), $(if $($(1).$(_in).seen), $(eval ### "skipping already-imported $(_in)") , $(eval $(1).$(_in).seen := true) $(call _import-node,$(1),$(strip $(_in)),$(3)) ) , $(error $(1): "$(_in)" does not exist) ) ),1556,695.16116ms,1m59.356291639s func:$(if $(wildcard $(_in)), $(if $($(1).$(_in).seen), $(eval ### "skipping already-imported $(_in)") , $(eval $(1).$(_in).seen := true) $(call _import-node,$(1),$(strip $(_in)),$(3)) ) , $(error $(1): "$(_in)" does not exist) ),1492,695.141538ms,1m59.31431654s func:$(if $($(1).$(_in).seen), $(eval ### "skipping already-imported $(_in)") , $(eval $(1).$(_in).seen := true) $(call _import-node,$(1),$(strip $(_in)),$(3))),1492,695.103627ms,1m59.274735972s func:$(call _import-node,$(1),$(strip $(_in)),$(3)),1492,695.059475ms,1m59.211652155s func:$(call _import-nodes-inner,$(1),$($(1).$(2).inherited),$(3)),1492,665.538963ms,1m34.44328975s func:$(call import-products, $(all_product_makefiles)),1,25.242518851s,25.242518851s func:$(call import-nodes,PRODUCTS,$(1),$(_product_var_list)),1,25.242508858s,25.242508858s func:$(if $(foreach _in,$(2), $(eval _node_import_context := _nic.$(1).[[$(_in)]]) $(if $(_include_stack),$(eval $(error ASSERTION FAILED: _include_stack shouldbe empty here: $(_include_stack))),) $(eval _include_stack := ) $(call _import-nodes-inner,$(_node_import_context),$(_in),$(3)) $(call move-var-list,$(_node_import_context).$(_in),$(1).$(_in),$(3)) $(eval _node_import_context :=) $(eval $(1) := $($(1)) $(_in)) $(if $(_include_stack),$(eval $(error ASSERTION FAILED: _include_stack should be empty here: $(_include_stack))),) ) ,),1,25.242492045s,25.242492045s func:$(foreach _in,$(2), $(eval _node_import_context := _nic.$(1).[[$(_in)]]) $(if $(_include_stack),$(eval $(error ASSERTION FAILED: _include_stack should be empty here: $(_include_stack))),) $(eval _include_stack := ) $(call _import-nodes-inner,$(_node_import_context),$(_in),$(3)) $(call move-var-list,$(_node_import_context).$(_in),$(1).$(_in),$(3)) $(eval _node_import_context :=) $(eval $(1) := $($(1)) $(_in)) $(if $(_include_stack),$(eval $(error ASSERTION FAILED: _include_stack should be empty here: $(_include_stack))),) ),1,25.242488741s,25.242488741s func:$(call _import-nodes-inner,$(_node_import_context),$(_in),$(3)),64,695.186876ms,24.959185237s .. | |||
2015-04-13 | Fix calls in multiple lines | Shinichiro Hamaji | |
2015-04-11 | Remove the use of evalExpr from condition functions | Shinichiro Hamaji | |
2015-04-11 | rewrite call and foreach | Fumitoshi Ukai | |
before: % ./run_integration_test.rb android tar -xzf ../android.tgz Running make for android... 6.05 secs Running kati for android... 64.08 secs android: OK PASS! after: % ./run_integration_test.rb android tar -xzf ../android.tgz Running make for android... 5.76 secs Running kati for android... 41.54 secs android: OK PASS! | |||
2015-04-10 | preserve func expression to make Func.String() faster. | Fumitoshi Ukai | |
maybe better to revisit it's worth doing. before: % ./run_integration_test.rb android tar -xzf ../android.tgz Running make for android... 5.78 secs Running kati for android... 62.50 secs android: OK PASS! after: % ./run_integration_test.rb android tar -xzf ../android.tgz Running make for android... 5.85 secs Running kati for android... 61.93 secs android: OK PASS! | |||
2015-04-10 | split expression parser and evaluator | Fumitoshi Ukai | |