* }}} */ * unary operations {{{ */
(v1 LValue)
| 1954 | /* unary operations {{{ */ |
| 1955 | |
| 1956 | func (ls *LState) ObjLen(v1 LValue) int { |
| 1957 | if v1.Type() == LTString { |
| 1958 | return len(string(v1.(LString))) |
| 1959 | } |
| 1960 | op := ls.metaOp1(v1, "__len") |
| 1961 | if op.Type() == LTFunction { |
| 1962 | ls.Push(op) |
| 1963 | ls.Push(v1) |
| 1964 | ls.Call(1, 1) |
| 1965 | ret := ls.reg.Pop() |
| 1966 | if ret.Type() == LTNumber { |
| 1967 | return int(ret.(LNumber)) |
| 1968 | } |
| 1969 | } else if v1.Type() == LTTable { |
| 1970 | return v1.(*LTable).Len() |
| 1971 | } |
| 1972 | return 0 |
| 1973 | } |
| 1974 | |
| 1975 | /* }}} */ |
| 1976 |