annotate vendor/github.com/yosssi/gcss/mixin_invocation.go @ 81:6ce24b93c8d0 draft

I keep inserting random bugs Signed-off-by: Izuru Yakumo <yakumo.izuru@chaotic.ninja>
author yakumo.izuru
date Tue, 12 Dec 2023 14:27:29 +0000
parents 787b5ee0289d
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
66
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
1 package gcss
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
2
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
3 import "io"
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
4
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
5 // mixinInvocation represents a mixin invocation.
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
6 type mixinInvocation struct {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
7 elementBase
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
8 name string
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
9 paramValues []string
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
10 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
11
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
12 // WriteTo writes the selector to the writer.
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
13 func (mi *mixinInvocation) WriteTo(w io.Writer) (int64, error) {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
14 return 0, nil
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
15 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
16
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
17 // decsParams returns the mixin's declarations and params.
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
18 func (mi *mixinInvocation) decsParams() ([]*declaration, map[string]string) {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
19 md, ok := mi.Context().mixins[mi.name]
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
20
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
21 if !ok {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
22 return nil, nil
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
23 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
24
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
25 params := make(map[string]string)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
26
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
27 l := len(mi.paramValues)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
28
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
29 for i, name := range md.paramNames {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
30 if i < l {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
31 params[name] = mi.paramValues[i]
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
32 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
33 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
34
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
35 return md.decs, params
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
36 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
37
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
38 // selsParams returns the mixin's selectors and params.
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
39 func (mi *mixinInvocation) selsParams() ([]*selector, map[string]string) {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
40 md, ok := mi.Context().mixins[mi.name]
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
41
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
42 if !ok {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
43 return nil, nil
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
44 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
45
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
46 params := make(map[string]string)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
47
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
48 l := len(mi.paramValues)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
49
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
50 for i, name := range md.paramNames {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
51 if i < l {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
52 params[name] = mi.paramValues[i]
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
53 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
54 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
55
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
56 return md.sels, params
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
57 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
58
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
59 // newMixinInvocation creates and returns a mixin invocation.
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
60 func newMixinInvocation(ln *line, parent element) (*mixinInvocation, error) {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
61 name, paramValues, err := mixinNP(ln, false)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
62
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
63 if err != nil {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
64 return nil, err
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
65 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
66
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
67 return &mixinInvocation{
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
68 elementBase: newElementBase(ln, parent),
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
69 name: name,
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
70 paramValues: paramValues,
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
71 }, nil
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
72 }