Skip to content

Instantly share code, notes, and snippets.

@akbertram
Last active July 13, 2019 16:38
Show Gist options
  • Save akbertram/d32df21e35eab1f6142a14495ec8f3b8 to your computer and use it in GitHub Desktop.
Save akbertram/d32df21e35eab1f6142a14495ec8f3b8 to your computer and use it in GitHub Desktop.
Compiling readBin
readBin <- function(con, what, n = 1L, size = NA_integer_, signed = TRUE,
endian = .Platform$endian)
{
if(is.character(con)) {
con <- file(con, "rb")
on.exit(close(con))
}
swap <- endian != .Platform$endian
if(!is.character(what) || is.na(what) ||
length(what) != 1L || ## hence length(what) == 1:
!any(what == c("numeric", "double", "integer", "int", "logical",
"complex", "character", "raw")))
what <- typeof(what)
.Internal(readBin(con, what, n, size, signed, swap))
}
T1₁ ← call is.character*₀(con₀)
if T1₁ goto L0 else L1
L0:
con₂ ← call file*₀(con₀, rb)
T2₂ ← promise(close(con))
if strict(on.exit*₀) goto L3 else L2
L3:
T2₄ ← call close*₀(con₂)
L2:
T2₃ ← Φ(T2₂, T2₄)
call on.exit*₀(T2₃)
L1:
T2₁ ← Φ(T2₀, T2₃)
con₁ ← Φ(con₀, con₂)
T3₁ ← .Platform₀$endian
swap₁ ← call !=(endian₀, T3₁)
T7₁ ← call is.character*₀(what₀)
T8₁ ← call !(T7₁)
if T8₁ goto L19 else L16 else na L17
L16:
T6₅ ← FALSE
goto L18
L17:
T6₇ ← NA
goto L18
L18:
T6₁ ← Φ(T6₅, T6₇)
T9₁ ← call is.na*₀(what₀)
if T9₁ goto L19 else L21 else na L20
L19:
T9₂ ← Φ(T9₀, T9₁)
T6₃ ← Φ(T6₀, T6₁)
T6₄ ← TRUE
goto L21
L20:
T6₂ ← NA
L21:
T9₃ ← Φ(T9₁, T9₂, T9₁)
T6₆ ← Φ(T6₁, T6₄, T6₂)
if T6₆ goto L13 else L10 else na L11
L10:
T5₇ ← FALSE
goto L12
L11:
T5₄ ← NA
goto L12
L12:
T5₅ ← Φ(T5₇, T5₄)
T10₃ ← call length*₀(what₀)
T11₃ ← call !=(T10₃, c(1L))
if T11₃ goto L13 else L15 else na L14
L13:
T11₂ ← Φ(T11₀, T11₃)
T10₂ ← Φ(T10₀, T10₃)
T5₂ ← Φ(T5₀, T5₅)
T5₃ ← TRUE
goto L15
L14:
T5₆ ← NA
L15:
T11₁ ← Φ(T11₃, T11₂, T11₃)
T10₁ ← Φ(T10₃, T10₂, T10₃)
T5₁ ← Φ(T5₅, T5₃, T5₆)
if T5₁ goto L7 else L4 else na L5
L4:
T4₃ ← FALSE
goto L6
L5:
T4₅ ← NA
goto L6
L6:
T4₁ ← Φ(T4₃, T4₅)
T12₁ ← promise(==(what, c(numeric, double, integer, int, logical, complex, character, raw)))
if strict(any*₀) goto L23 else L22
L23:
T13₁ ← call c*₀(numeric, double, integer, int, logical, complex, character, raw)
T12₂ ← call ==(what₀, T13₁)
L22:
T13₂ ← Φ(T13₀, T13₁)
T12₃ ← Φ(T12₁, T12₂)
T14₁ ← call any*₀(T12₃)
T15₁ ← call !(T14₁)
if T15₁ goto L7 else L9 else na L8
L7:
T15₃ ← Φ(T15₀, T15₁)
T14₃ ← Φ(T14₀, T14₁)
T13₄ ← Φ(T13₀, T13₂)
T12₅ ← Φ(T12₀, T12₃)
T4₆ ← Φ(T4₀, T4₁)
T4₇ ← TRUE
goto L9
L8:
T4₂ ← NA
L9:
T15₂ ← Φ(T15₁, T15₃, T15₁)
T14₂ ← Φ(T14₁, T14₃, T14₁)
T13₃ ← Φ(T13₂, T13₄, T13₂)
T12₄ ← Φ(T12₃, T12₅, T12₃)
T4₄ ← Φ(T4₁, T4₇, T4₂)
if T4₄ goto L24 else L25
L24:
what₁ ← call typeof*₀(what₀)
L25:
what₂ ← Φ(what₀, what₁)
T16₁ ← (readBin con₁ what₂ n₀ size₀ signed₀ swap₁)
return T16₁
T16₂ ← Φ(T16₀, T16₁)
T15₄ ← Φ(T15₀, T15₂)
T14₄ ← Φ(T14₀, T14₂)
T13₅ ← Φ(T13₀, T13₃)
T12₆ ← Φ(T12₀, T12₄)
T11₄ ← Φ(T11₀, T11₁)
T10₄ ← Φ(T10₀, T10₁)
T9₄ ← Φ(T9₀, T9₃)
T8₂ ← Φ(T8₀, T8₁)
T7₂ ← Φ(T7₀, T7₁)
T6₈ ← Φ(T6₀, T6₆)
T5₈ ← Φ(T5₀, T5₁)
T4₈ ← Φ(T4₀, T4₄)
T3₂ ← Φ(T3₀, T3₁)
T2₅ ← Φ(T2₀, T2₁)
what₃ ← Φ(what₀, what₂)
swap₂ ← Φ(swap₀, swap₁)
T1₂ ← Φ(T1₀, T1₁)
con₃ ← Φ(con₀, con₁)
T3₁ => [*]
T3₂ => [*]
file*₀ => [const function(description=, open=, blocking=TRUE, encoding=getOption(encoding), raw=FALSE, method=getOption(url.method, default))]
close*₀ => [const function(con=<missing_arg>, ...=<missing_arg>)]
readBin*₀ => [const function(con=<missing_arg>, what=<missing_arg>, n=c(1L), size=c(NA_integer_), signed=TRUE, endian=$(.Platform, endian))]
T16₁ => [*]
T16₂ => [*]
T12₁ => [promise]
T12₂ => [*]
T12₃ => [*]
T12₄ => [*]
T8₁ => [logical, len=1, ?NA]
T12₅ => [*]
T8₂ => [logical, len=1, ?NA]
T12₆ => [*]
T4₁ => [const FALSE]
T4₃ => [const FALSE]
T4₄ => [logical, len=1]
T4₆ => [const FALSE]
T4₇ => [const TRUE]
T4₈ => [logical, len=1]
T13₁ => [const c(numeric, double, integer, int, logical...8 elements total), names=c(NA_character_, NA_character_, NA_character_, NA_character_, NA_character_...8 elements total)]
T13₂ => [const c(numeric, double, integer, int, logical...8 elements total), names=c(NA_character_, NA_character_, NA_character_, NA_character_, NA_character_...8 elements total)]
T13₃ => [character, len>0, names?]
T13₄ => [const c(numeric, double, integer, int, logical...8 elements total), names=c(NA_character_, NA_character_, NA_character_, NA_character_, NA_character_...8 elements total)]
T9₁ => [*]
T13₅ => [character, len>0, names?]
T9₂ => [*]
T9₃ => [*]
T9₄ => [*]
T5₁ => [logical, len=1]
T5₂ => [const FALSE]
is.character*₀ => [const .Primitive("is.character")]
is.na*₀ => [const .Primitive("is.na")]
c*₀ => [const .Primitive("c")]
typeof*₀ => [const function(x=<missing_arg>)]
T5₃ => [const TRUE]
T1₁ => [logical, len=1, ?NA]
swap₁ => [*]
con₁ => [*]
what₁ => [*]
T5₅ => [const FALSE]
con₂ => [*]
what₂ => [*]
swap₂ => [*]
T1₂ => [logical, len=1, ?NA]
what₃ => [*]
con₃ => [*]
T5₇ => [const FALSE]
T5₈ => [logical, len=1]
T14₁ => [*]
T14₂ => [*]
T14₃ => [*]
T14₄ => [*]
T10₁ => [*]
T10₂ => [*]
T10₃ => [*]
T10₄ => [*]
T6₁ => [const FALSE]
T6₃ => [const FALSE]
T6₄ => [const TRUE]
T6₅ => [const FALSE]
T2₁ => [promise]
T2₂ => [promise]
T6₆ => [logical, len=1]
T2₃ => [promise]
T6₈ => [logical, len=1]
T2₅ => [promise]
on.exit*₀ => [const .Primitive("on.exit")]
T15₁ => [*]
T15₂ => [*]
T15₃ => [*]
T15₄ => [*]
T11₁ => [*]
T11₂ => [*]
any*₀ => [const .Primitive("any")]
T11₃ => [*]
T11₄ => [*]
T7₁ => [logical, len=1, ?NA]
T7₂ => [logical, len=1, ?NA]
length*₀ => [const .Primitive("length")]
T1₁ ← call is.character*(con₀)
con ← con
if T1₁ goto L0 else L1
L0:
con ← call file*(con₀, rb)
T2₂ ← promise(close(con))
T2₃ ← T2₂
goto L2
L2:
call on.exit*(T2₃)
con ← con
L1:
T3₁ ← .Platform₀$endian
swap ← call !=(endian₀, T3₁)
T7₁ ← call is.character*(what₀)
T8₁ ← call !(T7₁)
if T8₁ goto L19 else L16 else na L17
L16:
T6₅ ← FALSE
T6₁ ← T6₅
goto L18
L18:
T9₁ ← call is.na*(what₀)
T6₆ ← T6₁
if T9₁ goto L19 else L21 else na L20
L19:
T6₄ ← TRUE
T6₆ ← T6₄
goto L21
L21:
if T6₆ goto L13 else L10 else na L11
L10:
T5₇ ← FALSE
T5₅ ← T5₇
goto L12
L12:
T10₃ ← call length*(what₀)
T11₃ ← call !=(T10₃, c(1L))
T5₁ ← T5₅
if T11₃ goto L13 else L15 else na L14
L13:
T5₃ ← TRUE
T5₁ ← T5₃
goto L15
L15:
if T5₁ goto L7 else L4 else na L5
L4:
T4₃ ← FALSE
T4₁ ← T4₃
goto L6
L6:
T12₃ ← T12₁
goto L23
L23:
T12₂ ← call ==(what₀, c(numeric, double, integer, int, logical...8 elements total))
T12₃ ← T12₂
L22:
T14₁ ← call any*(T12₃)
T15₁ ← call !(T14₁)
T4₄ ← T4₁
if T15₁ goto L7 else L9 else na L8
L7:
T4₇ ← TRUE
T4₄ ← T4₇
goto L9
L9:
what ← what
if T4₄ goto L24 else L25
L24:
what ← call typeof*(what₀)
what ← what
L25:
T16₁ ← (readBin con₁ what₂ n₀ size₀ signed₀ swap₁)
return T16₁
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment