Skip to content

Commit f528aff

Browse files
committed
Restore Clojure-compatible optimized semantics
1 parent d7a5578 commit f528aff

37 files changed

Lines changed: 1081 additions & 63 deletions

pkg/compiler/analyze.go

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -408,6 +408,17 @@ func (a *Analyzer) parse(form interface{}, env Env) (*ast.Node, error) {
408408
if !ok {
409409
return a.parseInvoke(form, env)
410410
}
411+
if opSym.Namespace() == "" && len(opSym.Name()) > 1 &&
412+
strings.HasSuffix(opSym.Name(), ".") {
413+
class := NewSymbol(strings.TrimSuffix(opSym.Name(), "."))
414+
return a.parseNew(
415+
NewCons(
416+
NewSymbol("new"),
417+
NewCons(class, Rest(form)),
418+
),
419+
env,
420+
)
421+
}
411422

412423
switch opSym.FullName() {
413424
case "do":

pkg/gen/gljimports/gljimports_darwin_amd64.go

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -510,13 +510,15 @@ func RegisterImports(_register func(string, interface{})) {
510510
_register("github.com/glojurelang/glojure/pkg/lang.*IndexOutOfBoundsError", reflect.TypeOf((*github_com_glojurelang_glojure_pkg_lang.IndexOutOfBoundsError)(nil)))
511511
_register("github.com/glojurelang/glojure/pkg/lang.Indexed", reflect.TypeOf((*github_com_glojurelang_glojure_pkg_lang.Indexed)(nil)).Elem())
512512
_register("github.com/glojurelang/glojure/pkg/lang.IndexedSeq", reflect.TypeOf((*github_com_glojurelang_glojure_pkg_lang.IndexedSeq)(nil)).Elem())
513+
_register("github.com/glojurelang/glojure/pkg/lang.InitStaticKeywordMap", github_com_glojurelang_glojure_pkg_lang.InitStaticKeywordMap)
513514
_register("github.com/glojurelang/glojure/pkg/lang.Int64Reducer", reflect.TypeOf((*github_com_glojurelang_glojure_pkg_lang.Int64Reducer)(nil)).Elem())
514515
_register("github.com/glojurelang/glojure/pkg/lang.Int64ReductionStepper", reflect.TypeOf((*github_com_glojurelang_glojure_pkg_lang.Int64ReductionStepper)(nil)).Elem())
515516
_register("github.com/glojurelang/glojure/pkg/lang.Int64StepReducible", reflect.TypeOf((*github_com_glojurelang_glojure_pkg_lang.Int64StepReducible)(nil)).Elem())
516517
_register("github.com/glojurelang/glojure/pkg/lang.IntCast", github_com_glojurelang_glojure_pkg_lang.IntCast)
517518
_register("github.com/glojurelang/glojure/pkg/lang.InternKeyword", github_com_glojurelang_glojure_pkg_lang.InternKeyword)
518519
_register("github.com/glojurelang/glojure/pkg/lang.InternKeywordString", github_com_glojurelang_glojure_pkg_lang.InternKeywordString)
519520
_register("github.com/glojurelang/glojure/pkg/lang.InternKeywordSymbol", github_com_glojurelang_glojure_pkg_lang.InternKeywordSymbol)
521+
_register("github.com/glojurelang/glojure/pkg/lang.InternRecordType", github_com_glojurelang_glojure_pkg_lang.InternRecordType)
520522
_register("github.com/glojurelang/glojure/pkg/lang.InternSymbol", github_com_glojurelang_glojure_pkg_lang.InternSymbol)
521523
_register("github.com/glojurelang/glojure/pkg/lang.InternVar", github_com_glojurelang_glojure_pkg_lang.InternVar)
522524
_register("github.com/glojurelang/glojure/pkg/lang.InternVarName", github_com_glojurelang_glojure_pkg_lang.InternVarName)
@@ -564,6 +566,7 @@ func RegisterImports(_register func(string, interface{})) {
564566
_register("github.com/glojurelang/glojure/pkg/lang.KWCtxStatement", github_com_glojurelang_glojure_pkg_lang.KWCtxStatement)
565567
_register("github.com/glojurelang/glojure/pkg/lang.KWDef", github_com_glojurelang_glojure_pkg_lang.KWDef)
566568
_register("github.com/glojurelang/glojure/pkg/lang.KWDefault", github_com_glojurelang_glojure_pkg_lang.KWDefault)
569+
_register("github.com/glojurelang/glojure/pkg/lang.KWDirectLinking", github_com_glojurelang_glojure_pkg_lang.KWDirectLinking)
567570
_register("github.com/glojurelang/glojure/pkg/lang.KWDo", github_com_glojurelang_glojure_pkg_lang.KWDo)
568571
_register("github.com/glojurelang/glojure/pkg/lang.KWDoc", github_com_glojurelang_glojure_pkg_lang.KWDoc)
569572
_register("github.com/glojurelang/glojure/pkg/lang.KWDynamic", github_com_glojurelang_glojure_pkg_lang.KWDynamic)
@@ -633,6 +636,7 @@ func RegisterImports(_register func(string, interface{})) {
633636
_register("github.com/glojurelang/glojure/pkg/lang.KWQuote", github_com_glojurelang_glojure_pkg_lang.KWQuote)
634637
_register("github.com/glojurelang/glojure/pkg/lang.KWRawForms", github_com_glojurelang_glojure_pkg_lang.KWRawForms)
635638
_register("github.com/glojurelang/glojure/pkg/lang.KWRecur", github_com_glojurelang_glojure_pkg_lang.KWRecur)
639+
_register("github.com/glojurelang/glojure/pkg/lang.KWRedef", github_com_glojurelang_glojure_pkg_lang.KWRedef)
636640
_register("github.com/glojurelang/glojure/pkg/lang.KWRegex", github_com_glojurelang_glojure_pkg_lang.KWRegex)
637641
_register("github.com/glojurelang/glojure/pkg/lang.KWRet", github_com_glojurelang_glojure_pkg_lang.KWRet)
638642
_register("github.com/glojurelang/glojure/pkg/lang.KWSeq", github_com_glojurelang_glojure_pkg_lang.KWSeq)
@@ -782,6 +786,9 @@ func RegisterImports(_register func(string, interface{})) {
782786
_register("github.com/glojurelang/glojure/pkg/lang.NewRatio", github_com_glojurelang_glojure_pkg_lang.NewRatio)
783787
_register("github.com/glojurelang/glojure/pkg/lang.NewRatioBigInt", github_com_glojurelang_glojure_pkg_lang.NewRatioBigInt)
784788
_register("github.com/glojurelang/glojure/pkg/lang.NewRatioGoBigInt", github_com_glojurelang_glojure_pkg_lang.NewRatioGoBigInt)
789+
_register("github.com/glojurelang/glojure/pkg/lang.NewRecord", github_com_glojurelang_glojure_pkg_lang.NewRecord)
790+
_register("github.com/glojurelang/glojure/pkg/lang.NewRecordConstructor", github_com_glojurelang_glojure_pkg_lang.NewRecordConstructor)
791+
_register("github.com/glojurelang/glojure/pkg/lang.NewRecordFromMap", github_com_glojurelang_glojure_pkg_lang.NewRecordFromMap)
785792
_register("github.com/glojurelang/glojure/pkg/lang.NewRecurTarget", github_com_glojurelang_glojure_pkg_lang.NewRecurTarget)
786793
_register("github.com/glojurelang/glojure/pkg/lang.NewReduced", github_com_glojurelang_glojure_pkg_lang.NewReduced)
787794
_register("github.com/glojurelang/glojure/pkg/lang.NewRef", github_com_glojurelang_glojure_pkg_lang.NewRef)
@@ -847,6 +854,33 @@ func RegisterImports(_register func(string, interface{})) {
847854
_register("github.com/glojurelang/glojure/pkg/lang.*Range", reflect.TypeOf((*github_com_glojurelang_glojure_pkg_lang.Range)(nil)))
848855
_register("github.com/glojurelang/glojure/pkg/lang.Ratio", reflect.TypeOf((*github_com_glojurelang_glojure_pkg_lang.Ratio)(nil)).Elem())
849856
_register("github.com/glojurelang/glojure/pkg/lang.*Ratio", reflect.TypeOf((*github_com_glojurelang_glojure_pkg_lang.Ratio)(nil)))
857+
_register("github.com/glojurelang/glojure/pkg/lang.Record", reflect.TypeOf((*github_com_glojurelang_glojure_pkg_lang.Record)(nil)).Elem())
858+
_register("github.com/glojurelang/glojure/pkg/lang.*Record", reflect.TypeOf((*github_com_glojurelang_glojure_pkg_lang.Record)(nil)))
859+
_register("github.com/glojurelang/glojure/pkg/lang.RecordApplyTo", github_com_glojurelang_glojure_pkg_lang.RecordApplyTo)
860+
_register("github.com/glojurelang/glojure/pkg/lang.RecordAssoc", github_com_glojurelang_glojure_pkg_lang.RecordAssoc)
861+
_register("github.com/glojurelang/glojure/pkg/lang.RecordAssocEx", github_com_glojurelang_glojure_pkg_lang.RecordAssocEx)
862+
_register("github.com/glojurelang/glojure/pkg/lang.RecordCons", github_com_glojurelang_glojure_pkg_lang.RecordCons)
863+
_register("github.com/glojurelang/glojure/pkg/lang.RecordConstructor", reflect.TypeOf((*github_com_glojurelang_glojure_pkg_lang.RecordConstructor)(nil)).Elem())
864+
_register("github.com/glojurelang/glojure/pkg/lang.*RecordConstructor", reflect.TypeOf((*github_com_glojurelang_glojure_pkg_lang.RecordConstructor)(nil)))
865+
_register("github.com/glojurelang/glojure/pkg/lang.RecordContainsKey", github_com_glojurelang_glojure_pkg_lang.RecordContainsKey)
866+
_register("github.com/glojurelang/glojure/pkg/lang.RecordCount", github_com_glojurelang_glojure_pkg_lang.RecordCount)
867+
_register("github.com/glojurelang/glojure/pkg/lang.RecordEmpty", github_com_glojurelang_glojure_pkg_lang.RecordEmpty)
868+
_register("github.com/glojurelang/glojure/pkg/lang.RecordEntryAt", github_com_glojurelang_glojure_pkg_lang.RecordEntryAt)
869+
_register("github.com/glojurelang/glojure/pkg/lang.RecordEquiv", github_com_glojurelang_glojure_pkg_lang.RecordEquiv)
870+
_register("github.com/glojurelang/glojure/pkg/lang.RecordHash", github_com_glojurelang_glojure_pkg_lang.RecordHash)
871+
_register("github.com/glojurelang/glojure/pkg/lang.RecordHashEq", github_com_glojurelang_glojure_pkg_lang.RecordHashEq)
872+
_register("github.com/glojurelang/glojure/pkg/lang.RecordInvoke", github_com_glojurelang_glojure_pkg_lang.RecordInvoke)
873+
_register("github.com/glojurelang/glojure/pkg/lang.RecordMarker", reflect.TypeOf((*github_com_glojurelang_glojure_pkg_lang.RecordMarker)(nil)).Elem())
874+
_register("github.com/glojurelang/glojure/pkg/lang.*RecordMarker", reflect.TypeOf((*github_com_glojurelang_glojure_pkg_lang.RecordMarker)(nil)))
875+
_register("github.com/glojurelang/glojure/pkg/lang.RecordPersistentMap", github_com_glojurelang_glojure_pkg_lang.RecordPersistentMap)
876+
_register("github.com/glojurelang/glojure/pkg/lang.RecordSeq", github_com_glojurelang_glojure_pkg_lang.RecordSeq)
877+
_register("github.com/glojurelang/glojure/pkg/lang.RecordString", github_com_glojurelang_glojure_pkg_lang.RecordString)
878+
_register("github.com/glojurelang/glojure/pkg/lang.RecordType", reflect.TypeOf((*github_com_glojurelang_glojure_pkg_lang.RecordType)(nil)).Elem())
879+
_register("github.com/glojurelang/glojure/pkg/lang.*RecordType", reflect.TypeOf((*github_com_glojurelang_glojure_pkg_lang.RecordType)(nil)))
880+
_register("github.com/glojurelang/glojure/pkg/lang.RecordValAt", github_com_glojurelang_glojure_pkg_lang.RecordValAt)
881+
_register("github.com/glojurelang/glojure/pkg/lang.RecordValAtDefault", github_com_glojurelang_glojure_pkg_lang.RecordValAtDefault)
882+
_register("github.com/glojurelang/glojure/pkg/lang.RecordValue", reflect.TypeOf((*github_com_glojurelang_glojure_pkg_lang.RecordValue)(nil)).Elem())
883+
_register("github.com/glojurelang/glojure/pkg/lang.RecordWithout", github_com_glojurelang_glojure_pkg_lang.RecordWithout)
850884
_register("github.com/glojurelang/glojure/pkg/lang.RecurError", reflect.TypeOf((*github_com_glojurelang_glojure_pkg_lang.RecurError)(nil)).Elem())
851885
_register("github.com/glojurelang/glojure/pkg/lang.*RecurError", reflect.TypeOf((*github_com_glojurelang_glojure_pkg_lang.RecurError)(nil)))
852886
_register("github.com/glojurelang/glojure/pkg/lang.RecurTarget", reflect.TypeOf((*github_com_glojurelang_glojure_pkg_lang.RecurTarget)(nil)).Elem())
@@ -866,6 +900,7 @@ func RegisterImports(_register func(string, interface{})) {
866900
_register("github.com/glojurelang/glojure/pkg/lang.*Repeat", reflect.TypeOf((*github_com_glojurelang_glojure_pkg_lang.Repeat)(nil)))
867901
_register("github.com/glojurelang/glojure/pkg/lang.ResetThreadBindingFrame", github_com_glojurelang_glojure_pkg_lang.ResetThreadBindingFrame)
868902
_register("github.com/glojurelang/glojure/pkg/lang.Rest", github_com_glojurelang_glojure_pkg_lang.Rest)
903+
_register("github.com/glojurelang/glojure/pkg/lang.ReverseString", github_com_glojurelang_glojure_pkg_lang.ReverseString)
869904
_register("github.com/glojurelang/glojure/pkg/lang.Reversible", reflect.TypeOf((*github_com_glojurelang_glojure_pkg_lang.Reversible)(nil)).Elem())
870905
_register("github.com/glojurelang/glojure/pkg/lang.RuneFromCharLiteral", github_com_glojurelang_glojure_pkg_lang.RuneFromCharLiteral)
871906
_register("github.com/glojurelang/glojure/pkg/lang.SafeMerge", github_com_glojurelang_glojure_pkg_lang.SafeMerge)
@@ -974,6 +1009,7 @@ func RegisterImports(_register func(string, interface{})) {
9741009
_register("github.com/glojurelang/glojure/pkg/runtime.NewGenerator", github_com_glojurelang_glojure_pkg_runtime.NewGenerator)
9751010
_register("github.com/glojurelang/glojure/pkg/runtime.NewPromise", github_com_glojurelang_glojure_pkg_runtime.NewPromise)
9761011
_register("github.com/glojurelang/glojure/pkg/runtime.OpenURL", github_com_glojurelang_glojure_pkg_runtime.OpenURL)
1012+
_register("github.com/glojurelang/glojure/pkg/runtime.PrepareReplaceLast", github_com_glojurelang_glojure_pkg_runtime.PrepareReplaceLast)
9771013
_register("github.com/glojurelang/glojure/pkg/runtime.Promise", reflect.TypeOf((*github_com_glojurelang_glojure_pkg_runtime.Promise)(nil)).Elem())
9781014
_register("github.com/glojurelang/glojure/pkg/runtime.*Promise", reflect.TypeOf((*github_com_glojurelang_glojure_pkg_runtime.Promise)(nil)))
9791015
_register("github.com/glojurelang/glojure/pkg/runtime.RT", github_com_glojurelang_glojure_pkg_runtime.RT)

0 commit comments

Comments
 (0)